WIN32 system()-Äquivalent ohne Blockierung

Funktioniert perfekt!
Vielen Dank für die gute, ausführliche Hilfe! Einfach genial!

Gruß,

badday
 
Hallo,

das ganze geht auch noch etwas einfacher, ohne Übergabe der Prozess-ID (stattdessen Bestimmung im Kindprozess) und ohne aktives Warten (stattdessen WaitForSingleObject):
C:
// Kindprozess.c
#include <windows.h>
#include <TlHelp32.h>

DWORD GetParentProcessId() {
  HANDLE hSnapshot;
  PROCESSENTRY32 pe32;
  // Hole Snapshot aller Prozesse
  hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnapshot == INVALID_HANDLE_VALUE)
    return 0;

  pe32.dwSize = sizeof(pe32);

  if (!Process32First(hSnapshot, &pe32)) {
    CloseHandle(hSnapshot);
    return 0;
  }

  // Durchlaufe alle Prozesse im Snapshot und suche aktuellen Prozess
  do {
    if (pe32.th32ProcessID == GetCurrentProcessId()) {
      // Aktuellen Prozess gefunden, gib ID des Parents zurück
      CloseHandle(hSnapshot);
      return pe32.th32ParentProcessID;
    }
  } while (Process32Next(hSnapshot, &pe32));

  CloseHandle(hSnapshot);
  return 0;
}

int main(int argc, char *argv[]) {
  DWORD dwParentId;
  HANDLE hProcess;
  DWORD dwResult;
  
  dwParentId = GetParentProcessId();
  if (dwParentId == 0)
    return EXIT_FAILURE;

  hProcess = OpenProcess(SYNCHRONIZE, FALSE, dwParentId);
  // Auf Beendigung warten
  dwResult = WaitForSingleObject(hProcess, INFINITE);
  CloseHandle(hProcess);

  if (dwResult != WAIT_OBJECT_0)
    return EXIT_FAILURE;

  // Elternprozess hat sich jetzt beendet
  // ...

  return EXIT_SUCCESS;
}

Grüße,
Matthias
 
Danke ;)

... ich würde dir allerdings empfehlen Unicode abzustellen, solange dein Projekt nicht auf den asiatischen Markt soll.

Das wäre absolut nicht anzuraten da es bereits in Europa schief geht, z.B. in Griechenland ...

Ausserdem würden deutsche Umlaute möglicherweise durch andere ersetzt, wenn eine andere
Codetabelle als deutsch aktiv ist.

Für UNICODE empfiehlt es sich zudem immer Text als
Code:
TEXT("irgendwas")
zu schreiben.


VG
Merano
 
Hallo,

m.E. sind die meisten Projekte wohl eher für den Heimgebrauch und müssen nicht europaweit laufen. Im übrigen würde ich für eine ausländische Version wohl keine deutschen Umlaute verwenden (und sowieso eine jeweilige Übersetzung implementieren, oder Englisch).
Daher halte ich persönlich es für nicht notwendig Unicode zu benutzen. Aber das ist natürlich auch jedem selber überlassen (und kann man bei Bedarf nat. auch noch anpassen).

lg
kickerxy
 
Zurück