名前付きオブジェクトの使用
次の例では、名前付きミューテックスを作成して開くことで 、オブジェクト名 を使用する方法を示します。
最初のプロセス
最初のプロセスでは、 CreateMutex 関数を使用してミューテックス オブジェクトを作成します。 同じ名前の既存のオブジェクトがある場合でも、この関数は成功します。
#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;
}
2 番目のプロセス
2 番目のプロセスでは 、OpenMutex 関数を使用して、既存のミューテックスへのハンドルを開きます。 指定した名前のミューテックス オブジェクトが存在しない場合、この関数は失敗します。 アクセス パラメーターはミューテックス オブジェクトへのフル アクセスを要求します。これは、待機関数のいずれかでハンドルを使用するために必要です。
#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;
}
関連トピック