Utilisation d’objets nommés
L’exemple suivant illustre l’utilisation de noms d’objets en créant et en ouvrant un mutex nommé.
Premier processus
Le premier processus utilise la fonction CreateMutex pour créer l’objet mutex. Notez que cette fonction réussit même s’il existe un objet portant le même nom.
#include <windows.h>
#include <stdio.h>
#include <conio.h>
// This process creates the mutex object.
int main(void)
{
HANDLE hMutex;
hMutex = CreateMutex(
NULL, // default security descriptor
FALSE, // mutex not owned
TEXT("NameOfMutexObject")); // object name
if (hMutex == NULL)
printf("CreateMutex error: %d\n", GetLastError() );
else
if ( GetLastError() == ERROR_ALREADY_EXISTS )
printf("CreateMutex opened an existing mutex\n");
else printf("CreateMutex created a new mutex.\n");
// Keep this process around until the second process is run
_getch();
CloseHandle(hMutex);
return 0;
}
Deuxième processus
Le deuxième processus utilise la fonction OpenMutex pour ouvrir un handle au mutex existant. Cette fonction échoue si un objet mutex portant le nom spécifié n’existe pas. Le paramètre d’accès demande un accès complet à l’objet mutex, ce qui est nécessaire pour que le handle soit utilisé dans l’une des fonctions d’attente.
#include <windows.h>
#include <stdio.h>
// This process opens a handle to a mutex created by another process.
int main(void)
{
HANDLE hMutex;
hMutex = OpenMutex(
MUTEX_ALL_ACCESS, // request full access
FALSE, // handle not inheritable
TEXT("NameOfMutexObject")); // object name
if (hMutex == NULL)
printf("OpenMutex error: %d\n", GetLastError() );
else printf("OpenMutex successfully opened the mutex.\n");
CloseHandle(hMutex);
return 0;
}
Rubriques connexes