C++におけるCreateMutex関数の使い方

C++では、CreateMutex関数を利用することで、ミューテックスオブジェクトを作成できます。

  1. Windows.h
#include <Windows.h>
  1. CreateMutex
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL                  bInitialOwner,
LPCTSTR               lpName
);

そのうち:

  1. lpMutexAttributes:新規作成されるミューテックスオブジェクトのセキュリティ属性を指定する、SECURITY_ATTRIBUTES構造体へのポインタを指定します。既定のセキュリティ属性を使用するには、NULLに設定できます。
  2. bInitialOwner:排他オブジェクトの最初の所有者を指定するブール値。TRUEの場合は、作成された排他オブジェクトは所有権を持ち、呼び出しスレッドはそのオブジェクトの所有者になります。FALSEの場合は、作成された排他オブジェクトは所有権を持たなくなります。
  3. lpName: NULLの場合は名前なしのミューテックスオブジェクトが作成され、そうでない場合は空文字で終わる文字列へのポインタで、ミューテックスオブジェクトの名前を指定する。名前はローカル名(例:”Local\\MyMutex” )かグローバル名(例:”Global\\MyMutex” ) にすることができます。
HANDLE hMutex = CreateMutex(NULL, FALSE, NULL);
  1. WaitForSingleObject
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD  dwMilliseconds
);

このうち、

  1. hHandle:ミューテックス・オブジェクトのハンドル。
  2. dwMilliseconds:待ち時間(ミリ秒単位)。INFINITE の場合、無限に待機する。
DWORD dwWaitResult = WaitForSingleObject(hMutex, INFINITE);
  1. ReleaseMutex
BOOL ReleaseMutex(
HANDLE hMutex
);

そのうち:

  1. hMutex:ミューテックス・オブジェクトのハンドル。
BOOL bResult = ReleaseMutex(hMutex);

排他制御オブジェクトを使用し終えたら、CloseHandle 関数でオブジェクトのハンドルを閉じる必要がある。これは関連するシステム リソースを解放するためだ。

CloseHandle(hMutex);
bannerAds