アプリの二重起動防止
ミューテックスに識別名(アプリ名)をつけて作成し、そのミューテックスを取得できる場合のみアプリを起動する。
他のスレッドが実行中であればWaitOneメソッドは待ち状態となる。
タイムアウトを0にしているので、即座にfalseが返る。
■C#
■C++
// アプリケーションの二重起動防止のため、ミューテックスを生成
System.Threading.Mutex hMutex = new System.Threading.Mutex(false, Application.ProductName);// ミューテックスを所有できる場合のみアプリケーションを起動する
if (hMutex.WaitOne(0, false)) {
Application.Run(new Apl());
}hMutex.Close();
BOOL Test::InitInstancd() {
HANDLE hMutex = CreateMutex(NULL, TRUE, "Test");
DWORD err = GetLastError();
// すでにアプリが起動中だとERROR_ALREADY_EXISTS(183)となる
if (err) {
if (hMutex != NULL) {
ReleaseMutex(hMutex);
CloseHandle(hMutex);
hMutex = NULL;
}
return FALSE;
}
return TRUE;
}