CComCriticalSection クラス
このクラスは、クリティカル セクション オブジェクトの所有権を取得および解放するメソッドを備えています。
構文
class CComCriticalSection
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CComCriticalSection::CComCriticalSection | コンストラクター。 |
パブリック メソッド
名前 | 説明 |
---|---|
CComCriticalSection::Init | クリティカル セクション オブジェクトを作成して初期化します。 |
CComCriticalSection::Lock | クリティカル セクション オブジェクトの所有権を取得します。 |
CComCriticalSection::Term | クリティカル セクション オブジェクトによって使用されるシステム リソースを解放します。 |
CComCriticalSection::Unlock | クリティカル セクション オブジェクトの所有権を解放します。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
CComCriticalSection::m_sec | CRITICAL_SECTION オブジェクト。 |
解説
CComCriticalSection
はクラス CComAutoCriticalSection と似ていますが、クリティカル セクションを明示的に初期化し、解放する必要があります。
通常は、typedef
名 CriticalSection によって CComCriticalSection
を使用します。 CComMultiThreadModel が使用されている場合、この名前は CComCriticalSection
を参照します。
Lock
と Unlock
を直接呼び出すことより安全な方法でこのクラスを使用するには、「CComCritSecLock Class」を参照してください。
要件
ヘッダー: atlcore.h
CComCriticalSection::CComCriticalSection
コンストラクター。
CComCriticalSection() throw();
解説
m_sec データ メンバーを NULL に設定します。
CComCriticalSection::Init
m_sec データ メンバーに含まれるクリティカル セクション オブジェクトを初期化する Win32 関数 InitializeCriticalSection を呼び出します。
HRESULT Init() throw();
戻り値
成功すると S_OK を、失敗すると E_OUTOFMEMORY または E_FAIL を返します。
CComCriticalSection::Lock
Win32 関数 EnterCriticalSection を呼び出します。この関数は、m_sec データ メンバーに含まれるクリティカル セクション オブジェクトの所有権をスレッドが取得できるようになるまで待機します。
HRESULT Lock() throw();
戻り値
成功すると S_OK を、失敗すると E_OUTOFMEMORY または E_FAIL を返します。
解説
クリティカル セクション オブジェクトはまず、Init メソッドへの呼び出しで初期化する必要があります。 保護されたコードの実行が完了したら、スレッドでは Unlock を呼び出してクリティカル セクションの所有権を解放する必要があります。
CComCriticalSection::m_sec
すべての CComCriticalSection
メソッドによって使用されるクリティカル セクション オブジェクトが含まれます。
CRITICAL_SECTION m_sec;
CComCriticalSection::Term
m_sec データ メンバーに含まれるクリティカル セクション オブジェクトによって使用されるあらゆるリソースを解放する Win32 関数 DeleteCriticalSection を呼び出します。
HRESULT Term() throw();
戻り値
S_OK を返します。
解説
Term
が呼び出されると、クリティカル セクションを同期に使用できなくなります。
CComCriticalSection::Unlock
m_sec データ メンバーに含まれるクリティカル セクション オブジェクトの所有権を解放する Win32 関数 LeaveCriticalSection を呼び出します。
HRESULT Unlock() throw();
戻り値
S_OK を返します。
解説
所有権をまず取得するには、スレッドで Lock メソッドを呼び出す必要があります。 Lock
を呼び出すたびに、対応する Unlock
を呼び出してクリティカル セクションの所有権を解放する必要があります。