Wie verwende ich die WaitForSingleObject-Methode, um auf das Beenden eines externen Programms zu warten?

8

Ich versuche, eine externe Anwendung mit erhöhtem Status zu starten, und warte, bis sie beendet ist, bevor ich fortfahre:

%Vor%

Dies startet, aber es wartet nur weiter. Das aufrufende Programm wird niemals nach dem Aufruf von WaitForSingleObject fortgesetzt, selbst nachdem das aufgerufene Programm beendet wurde.

Ich habe WAIT_OBJECT_0 anstelle von WAIT_TIMEOUT versucht, aber ich habe das gleiche Problem. Was mache ich hier falsch?

    
croceldon 10.03.2011, 14:35
quelle

3 Antworten

11

Was der Code

%Vor%

soll tun? Es ist eine Endlosschleife.

Verwenden Sie nur

%Vor%

stattdessen. Und ja, du brauchst

%Vor%

um den Prozess-Handle zu erhalten.

    
kludg 10.03.2011, 15:27
quelle
4

Dein Code ist kaputt. Sie übergeben das SEE_MASK_NOCLOSEPROCESS -Flag nicht an ShellExecuteEx() , so dass es kein gültiges Prozess-Handle an Sie zurückgibt, und Ihre Schleife ignoriert die Fehler, die WaitForSingleObject() Ihnen deswegen sagt, so dass Sie endlos enden Schleife.

Versuchen Sie es stattdessen:

%Vor%     
Remy Lebeau 11.03.2011 00:20
quelle
2

Wenn Sie Beschreibung von ShellExecuteEx in MSDN lesen, Sie werden das sehen:

  

hProzess

%Vor%      

Ein Handle für die neu gestartete Anwendung. Dieses Mitglied ist aktiviert   return und ist immer NULL, außer fMask   ist auf SEE_MASK_NOCLOSEPROCESS eingestellt.   Auch wenn fMask auf gesetzt ist   SEE_MASK_NOCLOSEPROCESS, hProcess wird   NULL sein, wenn kein Prozess gestartet wurde.

i.e. Sie haben einfach kein gültiges Handle. Sie müssen fMask wie oben beschrieben einstellen.

    
quelle

Tags und Links