MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MFCの基礎 - 2重起動の禁止のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MFCの基礎 - 2重起動の禁止
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == アプリケーションが起動している間は新たに起動出来ないようにする方法を記載する。<br> <br> 方法は、起動時にミューテックスオブジェクトを作成し所有権を確保する。<br> 起動中に同じアプリケーションを起動すると同じミューテックスオブジェクトが存在するので、GetLastError関数がERROR_ALREADY_EXISTSを返す。<br> これを利用して起動しているか判断する。<br> <br><br> == サンプルコード == まず、CWinAppの派生クラスのヘッダファイルにミューテックスオブジェクトを保存するHANDLE型のメンバ変数を用意する。<br> <syntaxhighlight lang="c++"> CWinAppの派生クラス.h private: HANDLE m_hMutex; </syntaxhighlight> <br> 次に、起動時にミューテックスオブジェクトを作成する。<br> InitInstance関数の最初にCreateMutex関数を使用して作成し、CreateMutex関数の3番目の引数にそのアプリケーション固有の文字列(アプリケーション名でよい)を渡す。<br> その直後に、GetlastError関数で既に起動しているか調べる。起動している場合、そのままミューテックスオブジェクトを開放し終了させる。<br> <syntaxhighlight lang="c++"> CWinAppの派生クラス.cpp BOOL CXXXApp::InitInstance() { m_hMutex = CreateMutex(FALSE, 0, [アプリケーション名]); // 起動している場合は終了させる if(::GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(m_hMutex); return FALSE; // InitInstance関数はFALSEを返すと終了する } // (以下略) } </syntaxhighlight> <br> 上記だけでは、アプリケーション終了時にミューテックスオブジェクトの所有権を解放していないため、次の起動ができない。<br> そのため、アプリケーション終了時にミューテックスオブジェクトを解放しなければならない。<br> <br> 解放を記述する場所は、クラスウィザードでExitInstance関数を追加し、そこで解放する。<br> <syntaxhighlight lang="c++"> CWinAppの派生クラス.cpp int CXXXApp::ExitInstance() { // Mutexの所有権を解放 ReleaseMutex(m_hMutex); CloseHandle(m_hMutex); return CWinApp::ExitInstance(); } </syntaxhighlight> <br> 以上で二重起動の禁止ができる。<br> <br><br> __FORCETOC__ [[カテゴリ:MFC]]
MFCの基礎 - 2重起動の禁止
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse