📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
編集の要約なし |
細 文字列「</source>」を「</syntaxhighlight>」に置換 |
||
| (2人の利用者による、間の3版が非表示) | |||
| 9行目: | 9行目: | ||
== サンプルコード == | == サンプルコード == | ||
まず、CWinAppの派生クラスのヘッダファイルにミューテックスオブジェクトを保存するHANDLE型のメンバ変数を用意する。<br> | まず、CWinAppの派生クラスのヘッダファイルにミューテックスオブジェクトを保存するHANDLE型のメンバ変数を用意する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
CWinAppの派生クラス.h | |||
private: | private: | ||
HANDLE m_hMutex; | HANDLE m_hMutex; | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
次に、起動時にミューテックスオブジェクトを作成する。<br> | 次に、起動時にミューテックスオブジェクトを作成する。<br> | ||
InitInstance関数の最初にCreateMutex関数を使用して作成し、CreateMutex関数の3番目の引数にそのアプリケーション固有の文字列(アプリケーション名でよい)を渡す。<br> | InitInstance関数の最初にCreateMutex関数を使用して作成し、CreateMutex関数の3番目の引数にそのアプリケーション固有の文字列(アプリケーション名でよい)を渡す。<br> | ||
その直後に、GetlastError関数で既に起動しているか調べる。起動している場合、そのままミューテックスオブジェクトを開放し終了させる。<br> | その直後に、GetlastError関数で既に起動しているか調べる。起動している場合、そのままミューテックスオブジェクトを開放し終了させる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
CWinAppの派生クラス.cpp | |||
BOOL CXXXApp::InitInstance() | BOOL CXXXApp::InitInstance() | ||
| 34行目: | 34行目: | ||
// (以下略) | // (以下略) | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
上記だけでは、アプリケーション終了時にミューテックスオブジェクトの所有権を解放していないため、次の起動ができない。<br> | 上記だけでは、アプリケーション終了時にミューテックスオブジェクトの所有権を解放していないため、次の起動ができない。<br> | ||
| 40行目: | 40行目: | ||
<br> | <br> | ||
解放を記述する場所は、クラスウィザードでExitInstance関数を追加し、そこで解放する。<br> | 解放を記述する場所は、クラスウィザードでExitInstance関数を追加し、そこで解放する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
CWinAppの派生クラス.cpp | |||
int CXXXApp::ExitInstance() | int CXXXApp::ExitInstance() | ||
| 51行目: | 51行目: | ||
return CWinApp::ExitInstance(); | return CWinApp::ExitInstance(); | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
以上で二重起動の禁止ができる。<br> | 以上で二重起動の禁止ができる。<br> | ||