C++におけるCreateMutex関数の使い方
C++では、CreateMutex関数を利用することで、ミューテックスオブジェクトを作成できます。
- Windows.h
#include <Windows.h>
- CreateMutex
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpName
);
そのうち:
- lpMutexAttributes:新規作成されるミューテックスオブジェクトのセキュリティ属性を指定する、SECURITY_ATTRIBUTES構造体へのポインタを指定します。既定のセキュリティ属性を使用するには、NULLに設定できます。
- bInitialOwner:排他オブジェクトの最初の所有者を指定するブール値。TRUEの場合は、作成された排他オブジェクトは所有権を持ち、呼び出しスレッドはそのオブジェクトの所有者になります。FALSEの場合は、作成された排他オブジェクトは所有権を持たなくなります。
- lpName: NULLの場合は名前なしのミューテックスオブジェクトが作成され、そうでない場合は空文字で終わる文字列へのポインタで、ミューテックスオブジェクトの名前を指定する。名前はローカル名(例:”Local\\MyMutex” )かグローバル名(例:”Global\\MyMutex” ) にすることができます。
HANDLE hMutex = CreateMutex(NULL, FALSE, NULL);
- WaitForSingleObject
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
このうち、
- hHandle:ミューテックス・オブジェクトのハンドル。
- dwMilliseconds:待ち時間(ミリ秒単位)。INFINITE の場合、無限に待機する。
DWORD dwWaitResult = WaitForSingleObject(hMutex, INFINITE);
- ReleaseMutex
BOOL ReleaseMutex(
HANDLE hMutex
);
そのうち:
- hMutex:ミューテックス・オブジェクトのハンドル。
BOOL bResult = ReleaseMutex(hMutex);
排他制御オブジェクトを使用し終えたら、CloseHandle 関数でオブジェクトのハンドルを閉じる必要がある。これは関連するシステム リソースを解放するためだ。
CloseHandle(hMutex);