Synchronistation bzw. blockieren

04/06/2008 - 12:06 von Thomas Steinbach | Report spam
Hallo NG,

ich will in meinem Programm etwas einbauen um
darauf zu warten das gewisse Operationen abgschlossen
sind bevor eine neue Aktion startet.

Jetzt habe ich die Funktion WaitForSingleObject. vgl.:
http://msdn.microsoft.com/en-us/library/ms687032(VS.85).aspx
gefunden, aber weiss jetzt nicht wie ich nun wirklich
auf das Ende von z.B. einer Kopieroperation warte.

Beisppiel ShFileOperation
snip
SHFileOperation(&sfo);
WaitForSingleObject(sfo.hwnd, INFINITE);
snap

oder auch das Starten oder Beenden eines anderen Processes:
snip
STARTUPINFO si;
PROCESS_INFORMATION pi;
char * szCmd = "mysqld-nt.exe -bla -blub";
CreateProcess(NULL, szCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) ;
WaitForSingleObject(pi.hProcess, 5000);
snap

So wird das ja wohl nicht gehen, aber
wie macht man das nun richtig?
Also quasi solange das Programm blockieren und
keine neuen Aktionen zulassen, bis ein gewisser
Process (hier mysql) gestatrtet ist.

Thomas
 

Lesen sie die antworten

#1 Stefan Reuther
04/06/2008 - 20:23 | Warnen spam
Thomas Steinbach wrote:
Beisppiel ShFileOperation
snip
SHFileOperation(&sfo);
WaitForSingleObject(sfo.hwnd, INFINITE);
snap



Ist SHFileOperation nicht eh synchron? Davon abgesehen kann
WaitForSingleObject nur auf Kernelobjekte warten, nicht auf GDI-Objekte,
steht ja auch auf der von dir zitierten MSDN-Seite.

oder auch das Starten oder Beenden eines anderen Processes:
snip
STARTUPINFO si;
PROCESS_INFORMATION pi;
char * szCmd = "mysqld-nt.exe -bla -blub";
CreateProcess(NULL, szCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) ;
WaitForSingleObject(pi.hProcess, 5000);
snap



Das dürfte darauf warten, dass der Prozess beendet wird. Auf das Starten
warten ist eh nicht so einfach. Bis der Prozess reingepaged ist? Bis er
seine Initialisierung beendet hat? Seinen Port aufgemacht? Zum Starten
von GUI-Prozessen gibt es WaitForInputIdle, das dürfte dir aber auch
nicht viel nutzen.


Stefan

Ähnliche fragen