MFCで同期処理
CEvent
普段はAPIの::CreateEvent()とWaitForxxx()関数を利用していたので、今回初めてCEventを使ってみての覚え書き
コンストラクタ
MSDNの引数説明がどうにも判りにくいので、覚え書き程度の落書き。
CEvent event(BOOL bInitiallyOwn, bManualReset, lpszName, lpsaAttribute); ↓Win32APIに直すと・・・ ::CreateEvent(lpsaAttribute, bManualReset,bInitiallyOwn, lpszName); lpsaAttribute: イベントオブジェクトにセキュリティ属性。 bManualReset: 手動or自動リセット(当然TRUEが手動リセット)。 bInitiallyOwn: イベントオブジェクトの初期状態。Trueで初期状態からシグナル状態。 lpszName: イベントオブジェクトの名前。
Unlockメソッド
当メソッドについては、もっともらしい事がMSDNに記述されているが、実態は以下の通りで何もしてない。
-MTEX.CPPより抜粋-
BOOL CEvent::Unlock()
{
return TRUE;
}
-MSDN CEvent::Unlock解説より-
イベント オブジェクトを解放します。
BOOL Unlock( );
戻り値
スレッドがイベント オブジェクトを所有していて、そのイベントが自動イベントの場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
ロック オブジェクトを再利用するときは、自動イベントを現在所有しているスレッドが終了後にイベントを解放するためにこのメンバ関数を呼び出します。ロック オブジェクトを再利用しないときは、ロック オブジェクトのデストラクタがこのメンバ関数を呼び出します。
イベントのアンロックなので、非シグナル状態にでもするのか、もしくは、イベントオブジェクトそのものが解放されるのかと思ってしまった。未熟者ガ━━━(゚Д゚;)━━━ン!
ちなみにCMutexの方は次のようになっていて、Mutexを解放しております。
BOOL CMutex::Unlock()
{
return ::ReleaseMutex(m_hObject);
}
