Mutex
-
Hallo,
ich muss in meiner Anwendung für einen gewissen Zeitraum mehrere Instanzen unterbinden. Mit CreateMutex funktioniert das wunderbar. Jedoch schaffe ich es nach diesem Zeitraum nicht mehr den Mutex zu entfernen.Mein bisheriger Code
// Beim Start der Anwendung wird auf jeweiligen // Mutex geprüft um dann die Anwendung gleich wieder // zu beenden (mehrere Instanzen unterbinden) ... HANDLE hMutex; ... ... hMutex = CreateMutex( NULL, TRUE, "mutexname" ); // In diesem Bereich sind keine zwei Instanzen möglich ReleaseHandle( hMutex ); CloseHandle( hMutex ); // Nur lässt sich auch hier keine zweite Instanz // mehr starten obwohl es hier wieder möglich sein sollte.
-
closehandle löscht nur dieses eine handle. solange andere anwendungen ain handle auf den mutex haben ist dieser weiterhin am leben.
-
Du mußt im Besitz des Mutexes sein um ihn zu zerstören.
Ich gehe davon aus das die anderen Instanzen nur gebildet werden können, wenn sie den Mutex besitzen.
Da du ein ReleaseHandle machst gibst du den Mutex frei, und sofort nimmt einer der darauf wartet den Mutex. Dieser besitzt
ihn dann und solange er ihn nicht freigibt, kannst du dich nicht mit den anderen um den Mutex kloppen und ihn dann doch nicht bekommen. Versuch doch mal den Mutex zu zerstören ohne ein ReleaseHandle davor zu machen
-
PAD schrieb:
Du mußt im Besitz des Mutexes sein um ihn zu zerstören.
der mutex wird erst zerstört wenn keine referenzen mehr da sind d.h. es darf keinen prozess geben, der ein handle auf den mutex hat.
-
...bin ich blöd

Bei der Überprüfung ob der jeweilige Mutex bereits existiert habe ich das Handle nicht wieder freigegeben. Dadurch funktionierte die spätere Freigabe nicht mehr. Problem gelöst
