第 号
|
Last Updated 2004/03/01
|
多重起動防止
Windows95 や WindowsNT などで多重起動を防止するにはウィンドウクラス(WNDCLASS)
にて判断する.
BOOL CMyApp::InitInstance()
{
if( FindWindow("MyFrameClass", NULL) != NULL ){
return FALSE;
}
}
この方法を使用するには PreCreateWindow() にてウィンドウクラスを登録しなければな
らない.
または Mutex にて判断する.
BOOL CMyApp::InitInstance()
{
HANDLE hPrevMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"MyInstance");
if(hPrevMutex) {
CloseHandle(hPrevMutex);
return FALSE;
}
// hMutex は HANDLE 型 protected メンバ
hMutex = CreateMutex(FALSE, 0, "MyInstance");
}
int CMyApp::ExitInstance()
{
ReleaseMutex(hMutex);
return CWinApp::ExitInstance();
}
この方法でほとんど問題はないが,同じアプリケーションが殆ど同時に複数起動され
た時に,全員 OpenMutex() に失敗して,(1つを除いて全員)CreateMutex() にも
失敗するかもしれない.
2004/03/01
参照
ウィンドウクラスの登録(多重起動防止)