Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm starten und auf Programmende warten (https://www.delphipraxis.net/56362-programm-starten-und-auf-programmende-warten.html)

himitsu 4. Nov 2005 20:07

Re: Programm starten und auf Programmende warten
 
Zitat:

Zitat von Aike
Bewirkt das nicht, dass genau der Sinn des Wartens umgangen wird?

Im Grunde genommen JA :roll:
Aber du kannst dann ja durch die Schleige im Hauptthread dennoch warten ;)

Zitat:

Zitat von Aike
Da wüsste ich nicht, wie das gehen sollte, bin aber offen für sowas. Einen Thread zu erstellen ist für mich zwar nicht einfach, aber das würde ich in erin oder zwei Stunden auch hinbekommen ;-) Von ProcessMessages habe ich aber gar keine Ahnung.

so als kleines Beispiel:
Delphi-Quellcode:
ThreadStartenUndDateiÜbergeben...
// prüfen ob Thread noch Läuft
While isThreadNochAktiv
  // prüfen of der Benutzter einen Abbruch wünscht
  and not Application.Terminated do Begin
  // Botschaftswarteschlange abarbeiten
  Application.ProcessMessages;
  // kleine Pause ... für die CPU-Auslastung
  Sleep(100);
End;

Aike 5. Nov 2005 10:07

Re: Programm starten und auf Programmende warten
 
Gut, ich hab mir jetzt also einen Thread dazu erstellt, in dem die Programme gestartet werden können. Hier die neuen Probleme ;-)

- Im Thread kann ich mit ShellExecuteAndWait() keine übergebene Datei (vom Typ string) aufrufen, da ShellExecuteAndWait() eine Var vom Typ PWideChar verlangt. Eine Typenumwandlung mit PWideChar() bringt nichts.
- Mit Sleep() hängt mein Programm genauso wie bei ShellExecuteAndWait() :-/
- Mir fällt keine Lösung ein, wie ich überprüfen könnte, dass der Thread noch existiert, wenn ShellExecuteAndWait() nicht geht. Ansonsten könnte man sowas machen ...
Delphi-Quellcode:
//Thread
ThreadGestartet:=True;
ShellExecuteAndWait();
ThreadGestartet:=False;

//Hauptprogramm
Thread.Create()
//Irgendwie warten (while-Schleife?)
if not uThread.ThreadGestartet then
  MachWeiterMitDemLustigenProgramm;

Aike 14. Nov 2005 13:56

Re: Programm starten und auf Programmende warten
 
Ich kenne mich nicht besonders aus mit Threads, aber was ich mir grade gedacht hab, war, dass man den Thread doch irgendwie releasen oder terminieren muss, wenn man ihn beenden will. Kann man auf diese Art vielleicht rausfinden, ob der Thread noch am laufen ist? Nein? Aaaaah! Hilfe ;-)

Ianisp 15. Nov 2005 13:52

Re: Programm starten und auf Programmende warten
 
Hi Aike,

Probiere mal das:

Delphi-Quellcode:
procedure TMainForm.runProcess(ExeName, Parameter: String; wait: boolean);
var SUInfo: TStartupInfo;
    ProcInfo: TProcessInformation;
    bool:boolean;
begin
   FillChar(SUInfo, SizeOf(SUInfo), #0);
   with SUInfo do begin
     cb := SizeOf(SUInfo);
     dwFlags := STARTF_USESHOWWINDOW;
   end;
   bool := CreateProcess(NIL, PChar(EXEName+' '+Parameter), NIL, NIL, FALSE,
                           CREATE_NEW_CONSOLE or
                           NORMAL_PRIORITY_CLASS, NIL,
                           PChar(ApplicationDir),
                           SUInfo, ProcInfo);
   if (bool)and(wait) then
     while WaitForSingleObject(ProcInfo.hProcess, 100 {INFINITE})=WAIT_TIMEOUT do begin
        //refresh;
        Application.ProcessMessages;
        if Application.Terminated then
           Break;
     end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr.
Seite 2 von 2     12   

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