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 ?
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.
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.
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.
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 ?
Bonjour,
Est-ce que c'est bien le même Thread d'exécution qui acquiert et qui rend le
mutex dans l'application ?