![]() |
CreateProcess-Problem
hi,
ich starte auf meinem Programm heraus mit CreateProcess ein Programm und warte darauf, dass dieses erst beendet ist, bevor ich weiter mache. Mein Problem ist nun folgendes. Es kann nun vorkommen, das mein gestartetes Programm Probleme und nicht beendet wird aus welchen Gründen auch immer. Im Ausgangprogramm warte ich also ewigkeiten darauf, dass sich das Programm beendet und wenn ich Pech habe, tut es dann nicht. Ich möchte nun angeben, dass wenn sich das Programm nicht freiwillig nach, sagen wir mal 1000 Sekunden, beendet hat, dann soll es eben Zwangsweise beendet werden. Wie erreiche ich das? Bisher habe ich das:
Delphi-Quellcode:
if CreateProcess(nil, // lpApplicationName
PChar(CmdLine), // lpCommandLine nil, // lpProcessAttributes nil, // lpThreadAttributes false, // bInheritHandles 0, // dwCreationFlags nil, // lpEnvironment nil, // lpCurrentDirectory StartupInfo, // lpStartupInfo ProcessInformation then // lpProcessInformation) begin // Warteprozess geändert {$IFDEF USEWFO} WFO := TWaitForObject.Create(true); WFO.hProcess := ProcessInformation.hProcess; WFO.Finished := false; WFO.Resume; while not WFO.Finished do begin Sleep(1000); Application.ProcessMessages; end; //WFO.Suspend; WFO.Terminate; WFO.Resume; WFO.WaitFor; WFO.Free; {$ELSE} repeat WaitResult := WaitForSingleObject(ProcessInformation.hProcess, 1000); Application.ProcessMessages; until WaitResult = WAIT_OBJECT_0; {$ENDIF} Application.ProcessMessages; CloseHandle(ProcessInformation.hProcess); CloseHandle(ProcessInformation.hThread); end; |
Re: CreateProcess-Problem
Hallo Susanne,
der zweite Parameter bei WaiForSingleObject ist in Millisekunden anzugeben. In deinem Falle von 1000sec also statt 1000 1000000 angeben. mfg Edit: P.S.: Die Repeat-Schleife ist unnötig, da du eh drauf wartest und die Schleife innerhalb von WaitForSingleObject ausgeführt wird. Ein Application.ProcessMessages sollte auch unnötig sein. mfg |
Re: CreateProcess-Problem
Die Schleife iost nicht unnötig. Läßt man die Schleife weg, reagiert das Fenster nicht mehr.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz