次の方法で共有


CComCriticalSection クラス

このクラスは、クリティカル セクション オブジェクトの所有権を取得および解放するメソッドを備えています。

構文

class CComCriticalSection

メンバー

パブリック コンストラクター

名前 説明
CComCriticalSection::CComCriticalSection コンストラクター。

パブリック メソッド

名前 説明
CComCriticalSection::Init クリティカル セクション オブジェクトを作成して初期化します。
CComCriticalSection::Lock クリティカル セクション オブジェクトの所有権を取得します。
CComCriticalSection::Term クリティカル セクション オブジェクトによって使用されるシステム リソースを解放します。
CComCriticalSection::Unlock クリティカル セクション オブジェクトの所有権を解放します。

パブリック データ メンバー

名前 説明
CComCriticalSection::m_sec CRITICAL_SECTION オブジェクト。

解説

CComCriticalSection はクラス CComAutoCriticalSection と似ていますが、クリティカル セクションを明示的に初期化し、解放する必要があります。

通常は、typedefCriticalSection によって CComCriticalSection を使用します。 CComMultiThreadModel が使用されている場合、この名前は CComCriticalSection を参照します。

LockUnlock を直接呼び出すことより安全な方法でこのクラスを使用するには、「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 を呼び出してクリティカル セクションの所有権を解放する必要があります。

関連項目

CComFakeCriticalSection クラス
クラスの概要
CComCritSecLock クラス