Synchronisation mit Mutexe
-
Hallo,
ich habe ein kleines Programm, das einen Thread aufruft und wartet, bis sich Dieser beendet hat. Dazu warte ich mit WaitForSingleObject, bis der Mutex freigegeben wird. Allerdings wartet das main-Programm gar nicht, bis der Thread durchlaufen ist. Kann mir jemand sagen, warum das so ist und was man machen kann, damit der gewünschte Effekt erzielt wird?
DWORD __stdcall Thread1(void*) { HANDLE hMutex; DWORD dwRet; hMutex=OpenMutex( MUTEX_ALL_ACCESS, FALSE, MYMUTEX); Sleep(5000); ReleaseMutex(hMutex); return TRUE; } int main(int argc, char* argv[]) { // Create a mutex with no initial owner. DWORD tID; DWORD dwWaitResult; hMutex = CreateMutex( NULL,FALSE,MYMUTEX); if (hMutex == NULL) { printf("CreateMutex error: %d\n", GetLastError()); } CreateThread(NULL,0,Thread1,NULL,0,&tID); dwWaitResult = WaitForSingleObject(hMutex, INFINITE); return 0; }
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
OpenMutex sperrt es noch nicht, das musst du noch mit einer wait function machen.
-
Ringding schrieb:
OpenMutex sperrt es noch nicht, das musst du noch mit einer wait function machen.
Ich will ja im main() mittels ders wait auf des release vom Thread warten. Warum geht das denn nicht so?
-
Weil du im Thread auch wait aufrufen musst.
-
Ringding schrieb:
Weil du im Thread auch wait aufrufen musst.
Und wie bitte soll ich das machen?
Wenn ich das so schreibeDWORD __stdcall Thread1(void*) { HANDLE hMutex; DWORD dwRet; hMutex=OpenMutex( MUTEX_ALL_ACCESS, FALSE, MYMUTEX); dwRet = WaitForSingleObject(hMutex, 5000L); Sleep(5000); ReleaseMutex(hMutex); return TRUE; } int main(int argc, char* argv[]) { // Create a mutex with no initial owner. DWORD tID; DWORD dwWaitResult; hMutex = CreateMutex( NULL,FALSE,MYMUTEX); if (hMutex == NULL) { printf("CreateMutex error: %d\n", GetLastError()); } CreateThread(NULL,0,Thread1,NULL,0,&tID); dwWaitResult = WaitForSingleObject(hMutex, INFINITE); return 0; }lauft die main trotzdem durch, ohne auf das Release im Thread zu warten!
-
Wundert mich nicht

Vermutlich kriegt der Main Thread das Mutex zuerst und terminiert. Du könntest es im Main Thread locken, dann den Thread erzeugen, dann freigeben und nochmal locken.