WaitForSingleObject bringt es nicht
-
Was hast du denn als zweiten Parameter angegeben?
-
Hi!
Ich hab 2 Programme erstellt. Bei test2 hab ich einfac in OnInitialUpdate unnötig Rechenzeit vrebufft (Sleep).STARTUPINFO si; PROCESS_INFORMATION pi; BOOL bRes; DWORD dwCode = 0; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb = sizeof (STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; bRes = CreateProcess(NULL,"C:\\test2\\Debug\\test2.exe",NULL,NULL, TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); WaitForInputIdle(pi.hProcess, INFINITE); AfxMessageBox("FERTIG");Also bei mir kam FERIG erst nach dem test2.exe fertig war.
Ich hoffe das hilft einwenig weiter
mfg
-
Das einfachste wäre, ein Named Event zu erzeugen (CreateEvent, mit gleichen Namen im Aufrufer und aufgerufenem Program), und der Aufgerufene setzt das Event z.B. beim ersten "Eintritt" in CWinApp::OnIdle, oder sonstwas
Der Aufrufer kann dann mit WaitForSingleObject auf das Event warten
-
@peterchen: Das geht in diesem Fall nicht, weil er die Programme nicht selbst geschrieben hat

-
Hat er nicht? Schad....
Hab ich übersehen.
Dann WaitForInputIdle
-
wieso nicht einfach etwas einfaches:
ShellExecute(....); while(!FindWindow(...)); // hier auf das proggie warten , was von ShellExecute gestartet wurde (ev timeout einbauen !)Details für beide sachen - msdn !
-
Uli0001 schrieb:
Vollständig bedeutet nicht nur das Fenster ist vorhanden sondern das Prog. ist wieder in einer Art Ruhezustand und wartet auf eingaben.
-
@-# #-:
Weil FindWindow sowieso verboten sein sollte:
- FindWindow hängt, wenn irgendeine App mit Desktop-Fenster hängt
- FindWindow findet das Fenster - solange niemand die Aserbaidschanische version ausführt
- FindWindow ist nutzlos bei Programmen, die z.B. den aktuellen Dokumenttitel mit in der Titelleiste anzeigen
- FindWindow findet u.U. das falsche Fenster, z.B. wenn mehrere Instanzen ausgeführt, oder ein anderes programm mit zufällig dem gleichen Titel
- Man bekommt ziemlich häßliche Pickel
-
Grüße,
erst einmal Danke das ihr euch einen Kopf macht. Nur leider ist noch keine Lösung gefunden. Ich habe gerade mit WaitForInputIdle ein wenig gespielt. Es bringt auch nicht die Lösung.
Erst einmal ja ich starte Programme die nicht von mir sind. Welche das sind ist flexibel und wie viele auch.
WaitForInputIdle kommt immer zu einem sehr frühen Zeitpunkt zurück wo an ein fertig geladenes Programm noch nicht zu denken ist.
Es scheint mir sehr so als das es für diese Problem keine Lösung gibt. Wenn ihr noch andere Ideen habe dann her damit.
Uli
-
Du könntest noch GetProcessTimes() versuchen: das liefert dir die Zeit, die ein Prozeß im User- bzw. im Kernel-Mode verbrät. Wenn die Zeiten sich nicht / kaum noch ändern - Prozeß langweilt sich
Ist aber auch keine perfekte Lösung:
Prozesse mit Idle-Threads, Prozesse die auf ein Kernel-Objekt wartenAndere Möglichkeit:
Eigener Thread mit sehr geringer Prio, und dort "ticks" zählen.
Dies ist aber eher ein Indikator der gesamten Systembelastung, und fällt bei Prozessen mit Idle-Threads wieder auf die Nase.