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/)
-   -   Externes Programm mehrfach starten / Instanzen überwachen (https://www.delphipraxis.net/169904-externes-programm-mehrfach-starten-instanzen-ueberwachen.html)

friedemann2009 20. Aug 2012 20:04

Externes Programm mehrfach starten / Instanzen überwachen
 
Abend' liebe Leute,

ich habe folgendes Problem: ich möchte aus meinem Prog heraus ein externes Tool (dem ich Daten zur Verarbeitung übergebe und dessen Ergebnis ich anschließend wieder einsammle) mehrfach starten und die Anzahl der gestarteten Instanzen kontrollieren, so dass (je nach CPU / Arbeitssystem) immer nur eine bestimmte Anzahl an Instanzen gestartet wird. Gibt es da eine Möglichkeit? Evtl. über eine "ExecAndWait"-Funktion o.ä.?

Ich habe es bislang so umgesetzt, dass ich über einen Timer heraus die einzelnen Tools gestartet und zugleich überwacht habe, ob bestimmte Konfig-Dateien, die man als Parameter-Dateien dem externen Tool übergeben muss, noch da ist. Aber das funktioniert nicht richtig. Und ehe ich jetzt da eine unsaubere Lösung stricke, wollte ich Euch lieber um Rat fragen.

Danke Euch und schöne Grüße,
Frieder

Popov 20. Aug 2012 20:19

AW: Externes Programm mehrfach starten / Instanzen überwachen
 
In welcher Form funktioniert es nicht richtig, bzw. weshalb empfindest du es als unsauber?

So wie ich es verstanden habe sollen es externe Programme sein, oder?

Wenn es keine externe Programme wären, könnte man es über Threads machen.

jaenicke 20. Aug 2012 20:27

AW: Externes Programm mehrfach starten / Instanzen überwachen
 
Auch die Überwachung der externen Programme könnte man in Threads auslagern, wenn direkte Threads nicht in Frage kommen. Dann könnte ein Threadpool die Verwaltung übernehmen und jeder Thread immer eine externe Instanz starten usw.

friedemann2009 20. Aug 2012 20:31

AW: Externes Programm mehrfach starten / Instanzen überwachen
 
Hi Popov,

ja, sind externe Programme.

Das Problem bei der Sache ist, dass ich die zu übergebende Parameterdatei für das Programm löschen muss, wenn das dazugehörige Tool 'fertig' ist. Ich habe die Lösch-Zeilen immer im Anschluss an einen ShellExecAndWait-Aufruf gesetzt. Der Programmablauf SOLLTE so aussehen:

Timer - Takt1
1) Lege Parameterdatei1 an
2) Starte Tool1
...Tool1 läuft
...gleichzeitig / irgendwann überschneidend:

Timer - Takt2
3) Prüfe, ob im Konfig-Verz n-Toolinstanzen nicht überschritten sind, sonst warten; wenn nicht überschritten, dann:
4) Lege Parameterdatei2 an
5) Starte Tool2 (= 2. Instanz von Tool1)
...Tool1 und 2 laufen
...irgendwann überschneidend:

6) Parameterdatei1 wird gelöscht
7) Evtl. wird bereits eine weitere Instanz gestartet


So schön, so gut. Leider funktioniert es nicht gut:
a) Es starten kunterbunt viele Instanzen (mal mehr, mal weniger - trotz funktionierender Instanzenkontrolle!)
b) Beim Schließen des Main-Programms kann ich das temp. Konfig-Verzeichnis nicht löschen, weil irgendetwas noch darauf zugreift (kann aber nicht sein, weil keine Parameterdateien mehr darin und auf das Verzeichnis zumindest dem Code nach kein Zugriff stattfinden sollte).

Also zwei recht grundlegende Probleme. Daher meine Frage, ob es dazu nicht bereits eine Shell-Procedur gibt, o.ä. Ich dachte z.B. daran, irgendwie via Handle o.ä. zu prüfen, ob und wieviele der externen Tools noch aktiv sind. Geht das?

Danke und Gruß,
Frieder

friedemann2009 20. Aug 2012 20:32

AW: Externes Programm mehrfach starten / Instanzen überwachen
 
Zitat:

Zitat von jaenicke (Beitrag 1178950)
Auch die Überwachung der externen Programme könnte man in Threads auslagern, wenn direkte Threads nicht in Frage kommen. Dann könnte ein Threadpool die Verwaltung übernehmen und jeder Thread immer eine externe Instanz starten usw.

Abend jaenicke,

ja, dem Prinzip nach dachte ich auch an sowas; aber wie geht dat? - Einen Tipp für Beispiel-Code?

Danke und Gruß,
Frieder

EDIT:

Ich habe nochmal gesucht. z.B. "Threadpool für Delphi" kommt für mich (D5) nicht in Frage. Was ich jetzt suche, aber noch nicht gefunden habe, ist eine Möglichkeit, über FindWindow o.ä. die Handles ALLER geöffneten Instanzen eines externen Progs zu finden.. Tipp? :?:

friedemann2009 21. Aug 2012 06:00

AW: Externes Programm mehrfach starten / Instanzen überwachen
 
Ok, meine Frage war offensichtlich zu doof.. Sry. Habe es jetzt mit EnumProcesses gelöst..

Gruß und trotzdem danke,
frieder


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 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