Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Waitforsingleobject bringt es nicht.

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.09.2003, 08:06 Uhr
Uli



Morgen,

ich habe das ganze Wochenende an einem Problem gegrübelt. Aus meiner Anwendung heraus starte ich mehrere Programme. Die Reihenfolge spielt dabei eine wichtig rolle. Darum bin ich gezwungen bei jedem neuen Programm zu warten bis es vollständig geladen wurde. Da die Programme aber recht umfangreich sind und jeder Rechner unterschiedlich schnell dauert das seine Zeit. Ich habe versucht mit WaitForSingleObject zu warten bis das Programm geladen ist. Leider ist das nur über zeit zu steuern bzw. es wird so lange gewartet bis das Programm wieder beendet wurde. Das ist beides nicht das was ich suche.
Hat jemand von euch eine Idee wie ich ermitteln kann ob ein Programm vollständig geladen wurde. Vollständig bedeutet nicht nur das Fenster ist vorhanden sondern das Prog. ist wieder in einer Art Ruhezustand und wartet auf eingaben. Erst in diesem zustand darf das nächste Programm gestartet werden.

Danke für eure Tips.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.09.2003, 18:44 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Ich hab 2 Programme erstellt. Bei test2 hab ich einfach in OnInitialUpdate unnötig Rechenzeit verbufft (Sleep).


C++:
  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
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.09.2003, 18:50 Uhr
uguris



Hallo,

dieses Problem kannst du mit "Interprocess Communication" lösen.
Events, mailslot, Mutex, Semaphore,...

Ein Beispiel wie man das mit Events macht:

MainProcess erzeugt ein Event mit eine eindeutige Name:
HANDLE hEvent = ::CreateEvent(NULL, FALSE, FALSE, "MyEventName");
Und wartet bis dieses Event signaled wird. (Von dem anderen Process)
::WaitForSingleObject(hEvent, INFINITE)

----------

Der andere Prozess, den du warten must öffnet das gleiche Event:
HANDLE hEvent = OpenEvent(..............,"MyEventName)

SetEvent aufrufen damit der MainProcess erfährt, dass der aufgerufene process geladen ist.
SetEvent(hEvent)
------
Jetzt kann der main process weitergehen.

::CloseHandle(..) nicht vergessen.

Hoffentlich hast du es verstanden. Wenn du noch fragen hast schreibs einfach.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.09.2003, 19:02 Uhr
mike
Pinguinhüpfer
(Operator)


@uguris: Ich hab mit Uli übers ICQ und in anderen Foren gesprochen und er startet fremde Programme. Also ist das mit den Events leider nicht möglich.
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.09.2003, 20:31 Uhr
~Spacelord
Gast


WaitForInputIdle

MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.09.2003, 10:07 Uhr
Uli



Hallo
@uguris: Mike hat recht. es geht um Programme die nicht aus meiner Hand sind.
@Spacelord: Habe ich auch schon versucht. WaitForInputIdle springt schon wieder zurück wo keines der mir z.Z. bekannten Programme die ich starte fertig geladen ist.
@Mike Der Code ist der gleiche mit dem ich es auch versuche. Anscheinend sind die Programme die ich starte schneller mit der OnInit durch als deines.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.09.2003, 11:33 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Sind das eigentlich "visuelle" Programme? Also mit GUI? Denn da stand was, es wird nur aufgerufen, wenn der Benutzer bereit zur Eingabe ist oder so. Muss mir das nochmal genau anschaun.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: