Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateProcess-Problem (https://www.delphipraxis.net/38312-createprocess-problem.html)

Susanne 17. Jan 2005 15:37


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;

Tyrael Y. 17. Jan 2005 16:05

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

Luckie 17. Jan 2005 17:22

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 09:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz