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.


Anmelden zum Antworten