📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

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