Compartir a través de


Usar objetos con nombre

En el ejemplo siguiente se muestra el uso de nombres de objeto mediante la creación y apertura de una exclusión mutua con nombre.

Primer proceso

El primer proceso usa la función CreateMutex para crear el objeto de exclusión mutua. Tenga en cuenta que esta función se realiza correctamente incluso si hay un objeto existente con el mismo nombre.

#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;
}

Segundo proceso

El segundo proceso usa la función OpenMutex para abrir un identificador a la exclusión mutua existente. Esta función produce un error si no existe un objeto de exclusión mutua con el nombre especificado. El parámetro de acceso solicita acceso total al objeto de exclusión mutua, que es necesario para que el identificador se use en cualquiera de las funciones de espera.

#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;
}

Nombres de objeto

Usar objetos de exclusión mutua