![]() |
Re: Programm starten und auf Programmende warten
Zitat:
Aber du kannst dann ja durch die Schleige im Hauptthread dennoch warten ;) Zitat:
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; |
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; |
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 ;-)
|
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. |
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