AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Schleife in Delphi

Ein Thema von lukdelphias · begonnen am 21. Jul 2020 · letzter Beitrag vom 21. Jul 2020
Antwort Antwort
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#1

Schleife in Delphi

  Alt 21. Jul 2020, 10:08
Hallo liebes Forum für mein Projekt brauche ich eine Schleife welche überprüft ob ein Prozess aktiv ist. Sobald der Prozess inaktiv ist soll das Programm eine ANDERE exe ausführen.
Ein Funktion für die Prozessüberwachung habe ich schon.
Alleridngs habe ich keine Idee für die Schleife. Im Moment fällt mir nur eine Endlosschelife ein, damit hängt sich aber das Programm logischerweise auf und öffnet die exe tausende male

Hier mein Ansatz:
Delphi-Quellcode:
while True do
      if processExists('box.exe') then ShowMessage('AKTIV')
      else ShellExecute(0,'open', PChar('U:\Programme\box\delete.exe'), nil, nil, SW_HIDE);
Wie würde ihr das machen sodass die Prozesse nur solange gescannt werden bis ein Prozess beendet wurde?

Grüße

Geändert von lukdelphias (21. Jul 2020 um 10:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.679 Beiträge
 
Delphi 5 Professional
 
#2

AW: Schleife in Delphi

  Alt 21. Jul 2020, 10:14
Wie wär's mit
Delphi-Quellcode:
while processExists('box.exe') do begin
    Sleep(500);
end;
ShellExecute(0,'open', PChar('U:\Programme\box\delete.exe'), nil, nil, SW_HIDE);
Geht natürlich auch mit fußgesteuerter Schleife, also z.B. repeat [...] until NOT processExists(...) .

Ich vermute aber, dass du das im Hintergrund machen willst. Dafür würde sich vielleicht ein Timer anbieten.

Grüße
Dalai
  Mit Zitat antworten Zitat
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Schleife in Delphi

  Alt 21. Jul 2020, 10:22
Perfekt deine erste Lösung hat mir gereicht. Nur dein sleep hab ich durch ein Delay getauscht. Für delay hab ich eine eigene Unit gemacht. Damit macht das Programm zwar eine 'Pause' allerdings läuft es im Hintergrund.
Vielen Dank für die Hilfe.

Grüße
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
928 Beiträge
 
#4

AW: Schleife in Delphi

  Alt 21. Jul 2020, 11:28
Wenn du deine "box.exe" selbst startest, könntest du auch mit WaitForSingleObject arbeiten

Delphi-Quellcode:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWORD): Longword;
var
   StartupInfo: TStartupInfo;
   ProcessInfo: TProcessInformation;
begin
   FillChar(StartupInfo, SizeOf(StartupInfo), #0);
   StartupInfo.cb := SizeOf(StartupInfo);
   StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
   StartupInfo.wShowWindow := ShowCmd;
   if not CreateProcess(nil,
     @Filename[1],
     nil,
     nil,
     False,
     CREATE_NEW_CONSOLE or
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     StartupInfo,
     ProcessInfo)
     then
       Result := WAIT_FAILED
   else
   begin
     if wait = FALSE then
     begin
       if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
       exit;
     end;
     WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
     GetExitCodeProcess(ProcessInfo.hProcess, Result);
   end;
   if ProcessInfo.hProcess <> 0 then
     CloseHandle(ProcessInfo.hProcess);
   if ProcessInfo.hThread <> 0 then
     CloseHandle(ProcessInfo.hThread);
end;
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Schleife in Delphi

  Alt 21. Jul 2020, 11:43
Danke für den Tipp,
alleridngs starte ich die exe nicht selbst. Das läuft über einen automatisierten Vorgang und dieser startet die exe alle 30 Minuten.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Schleife in Delphi

  Alt 21. Jul 2020, 13:27
alleridngs starte ich die exe nicht selbst. Das läuft über einen automatisierten Vorgang und dieser startet die exe alle 30 Minuten.
Du könntest Dir aber die Prozess-ID suchen und dann mit WaitForSingleObject arbeiten. Das wäre dann der korrekte - also "offizielle" - Weg.

Hier im Forum suchenProzess ID suchen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 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