CreateMutex, OpenMutex et le Processus de synchronisation
Je suis en train de faire ce qui suit:
Processus doit utiliser OpenMutex pour voir si le Processus B est en cours d'exécution.
Processus B doit utiliser CreateMutex de laisser le Processus de savoir qu'il est en cours d'exécution.
Assez simple en fait...
Voilà ce qui se passe:
- Exécuter le processus A -> Il voit que le processus B n'est pas en cours d'exécution. So far So good.
- Exécuter le processus B -> Il crée le mutex.
- Exécuter le processus d'Un nouveau -> Il voit que le processus B est maintenant en cours d'exécution. Encore bonne.
- Je ferme le processus B (qui devrait fermer le mutex).
- Exécuter le processus A -> Il voit encore que le processus B est en cours d'exécution ! (OpenMutex ne manque PAS).
Ce que je fais mal ??
Voici la partie de mon code:
//Start of process B
HANDLE hMutex = ::CreateMutex(NULL, TRUE, MY_MUTEX_NAME);
MessageBox(NULL, _T("PROCESS B !"), _T("TEST"), 0);
CloseHandle(hMutex);
//End of process B
//Start of process A
HANDLE hMutex = ::OpenMutex(SYNCHRONIZE, FALSE, MY_MUTEX_NAME);
if(hMutex != NULL)
{
MessageBox(NULL, _T("PROCESS B is alive !"), _T("TEST"), 0);
}
CloseHandle(hMutex);
//End of process A
OriginalL'auteur Shaish | 2012-06-28
Vous devez vous connecter pour publier un commentaire.
Vous devez fermer le mutex dans le processus Un après l'appel de la OpenMutex pour libérer la valeur de référence du mutex, de sorte que le système peut le supprimer. Veuillez vous référer MSDN. "L'objet mutex est détruit lors de sa dernière manche a été fermé."
Il est un exemple de travail ici
La documentation MSDN dit "Utilisation de la fonction CloseHandle pour fermer la poignée. Le système ferme le handle automatiquement lorsque le processus se termine. L'objet mutex est détruit lors de sa dernière manche a été fermé.". Ainsi, lorsque le processus est terminé, la poignée est fermée, mais, pas de l'objet... cela reste..
et qu'en est B? Vous avez besoin de la proximité de la poignée il y a (bien sûr)... j'ai écrit sur Un seulement parce que c'est l'endroit où il est facile de manquer.
OriginalL'auteur PermanentGuest