AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Externes Programm mehrfach starten / Instanzen überwachen
Thema durchsuchen
Ansicht
Themen-Optionen

Externes Programm mehrfach starten / Instanzen überwachen

Ein Thema von friedemann2009 · begonnen am 20. Aug 2012 · letzter Beitrag vom 21. Aug 2012
Antwort Antwort
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#1

Externes Programm mehrfach starten / Instanzen überwachen

  Alt 20. Aug 2012, 21:04
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Externes Programm mehrfach starten / Instanzen überwachen

  Alt 20. Aug 2012, 21:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Externes Programm mehrfach starten / Instanzen überwachen

  Alt 20. Aug 2012, 21:27
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#4

AW: Externes Programm mehrfach starten / Instanzen überwachen

  Alt 20. Aug 2012, 21:31
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
  Mit Zitat antworten Zitat
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#5

AW: Externes Programm mehrfach starten / Instanzen überwachen

  Alt 20. Aug 2012, 21:32
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?

Geändert von friedemann2009 (20. Aug 2012 um 21:53 Uhr)
  Mit Zitat antworten Zitat
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#6

AW: Externes Programm mehrfach starten / Instanzen überwachen

  Alt 21. Aug 2012, 07:00
Ok, meine Frage war offensichtlich zu doof.. Sry. Habe es jetzt mit EnumProcesses gelöst..

Gruß und trotzdem danke,
frieder
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:09 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