OVH Cloud OVH Cloud

à propos des mutex

12 réponses
Avatar
Frd
Bonjour,

une petite question :)
J'ai une appli dont je ne veux qu'une seule instance et pour cela
j'utilise un mutex
au lancement
HANDLE m_MonMutex = CreateMutex(NULL, FALSE, "MonNomDeMutex");

Je peux donc voir si l'appli est déjà lancée selon le résultat de
GetLastError() et quitter

en sortie
ReleaseMutex(m_MonMutex);

Normalement tout se passe bien, sauf sur un vieil ordi en Win98, où le
ReleaseMutex ne semble pas se faire.
Du coup impossible de lancer l'appli 2 fois de suite, il faut redémarrer.

J'ai essayé avec un petit programme qui tente le ReleaseMutex si il le
trouve, mais ça marche pas parce que je ne suis pas propriétaire du
mutex en question...
Y a-t-il une solution pour virer un mutex qu'on a pas créé soi-même ?
Ça se cache où ces bestioles ?

Merci d'avance

Fred

2 réponses

1 2
Avatar
Bertrand Usse
Frd wrote:
Tout à fait, mais j'ai aussi cette erreur (ERROR_NOT_OWNER) lors du
ReleaseMutex() sur XP.



On parle bien de l'appel à ReleaseMutex() qui est fait dans le processus
qui a effectué un appel avec succès à CreateMutex() ?

Si oui, c'est étrange, il faudrait voir le code. Si non, alors c'est
normal que le processus qui n'a pas créé le mutex n'en soit pas
propriétaire.

Je vais tester avec CloseHandle() dès que possible.



Voilà, de toute façon, en dehors de toute autre considération, c'est ce
qu'il faut faire pour libérer un mutex.

PS : Il faut faire autant de CloseHandle() que de handles obtenus via
CreateMutex() et OpenMutex() pour que le mutex soit effectivement libéré
en tant que ressource système.
Avatar
Laurent Martin
Bonjour,



Est-ce que c'est bien le même Thread d'exécution qui acquiert et qui rend le
mutex dans l'application ?
1 2