SignalObjectAndWait: Objekt de-signalisieren?
-
Hi,
hab gerade ein Problem mit Mutexen.
Wenn ich SignalObjectAndWait aufrufe, dann bleibt das Mutex-Objekt offenbar ewig signalisiert. Jeder Aufruf von WaitForSingleObject kehrt daraufhin sofort zurück.
Wie kann ich das Objekt dann wieder "de-signalisieren", sodass WaitForSingleObject nicht mehr sofort zurückkehrt?mfg. Tubos
-
Ein Mutex wird designalisiert, wenn ein Thread ihn in Besitz nimmt (CreateMutex/OpenMutex).
-
Hab das gleich eingebaut. Leider bleibt der Mutex signalisiert.
// Verwendete Variablen static HANDLE mutex; // Initialisierung mutex = CreateMutex(0, FALSE, "beepmutex"); // Seperater Thread while (true) { WaitForSingleObject(mutex, INFINITE); // Warte, bis Mutex signalisiert ist OpenMutex(SYNCHRONIZE, false, "beepmutex"); // Signalisierung aufheben ... } // Das hier wird genau einmal aufgerufen SignalObjectAndWait(mutex, 0, INFINITE, FALSE);Obwohl ich OpenMutex aufrufe, läuft die while-Schleife weiter.
SignalObjectAndWait wird garantiert nur einmal aufgerufen.mfg. Tubos
-
Was gibt dir WaitForSingleObject denn zurück?
Kann es sein, dass du versuchst, einen Mutex wie ein Event zu benutzen?
-
MSDN schrieb:
After a thread obtains ownership of a mutex, it can specify the same mutex in repeated calls to the wait-functions without blocking its execution. This prevents a thread from deadlocking itself while waiting for a mutex that it already owns. To release its ownership under such circumstances, the thread must call ReleaseMutex once for each time that the mutex satisfied the conditions of a wait function.
Vielleicht hilft dir das weiter

-
Danke für die Hilfe!
Ich verwende jetzt Events und es funktioniert.