CComMultiThreadModel::AutoCriticalSection
CComMultiThreadModel の使用中に、typedef 名 AutoCriticalSection は CComAutoCriticalSection クラスを参照します。このクラスには、クリティカル セクション オブジェクトの所有権を取得および解放するためのメソッドが用意されています。
typedef CComAutoCriticalSection AutoCriticalSection;
解説
CComSingleThreadModel および CComMultiThreadModelNoCS にも、AutoCriticalSection の定義が含まれています。 次の表は、スレッド化モデル クラスと、AutoCriticalSection によって参照されるクリティカル セクション クラスとの関係を示しています。
定義されているクラス |
参照されるクラス |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
AutoCriticalSection の他にも、typedef 名 CriticalSection を使用できます。 CRT スタートアップ コードを削除する場合は、グローバル オブジェクトまたは静的クラス メンバーで AutoCriticalSection を指定しないでください。
使用例
次のコードは CComObjectRootEx をモデルに作成されています。スレッド環境で使用する AutoCriticalSection の例を示しています。
template< class ThreadModel >
class CMyAutoCritClass
{
public:
typedef ThreadModel _ThreadModel;
typedef typename _ThreadModel::AutoCriticalSection _CritSec;
CMyAutoCritClass() : m_dwRef(0) {}
ULONG InternalAddRef()
{
return _ThreadModel::Increment(&m_dwRef);
}
ULONG InternalRelease()
{
return _ThreadModel::Decrement(&m_dwRef);
}
void Lock() { m_critsec.Lock( ); }
void Unlock() { m_critsec.Unlock(); }
private:
_CritSec m_critsec;
LONG m_dwRef;
};
次の各表に InternalAddRef メソッドおよび Lock メソッドの結果を示します。アプリケーションで使われる ThreadModel テンプレートのパラメーターとスレッド化モデルに応じて、2 つの表に分けて示します。
ThreadModel = CComObjectThreadModel
方法 |
シングルスレッドまたはアパートメント スレッド |
フリー スレッド |
---|---|---|
InternalAddRef |
インクリメントは、スレッド セーフではありません。 |
インクリメントは、スレッド セーフです。 |
Lock |
ロックするクリティカル セクションがないので、何の処理も行いません。 |
クリティカル セクションはロックされます。 |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
方法 |
シングルスレッドまたはアパートメント スレッド |
フリー スレッド |
---|---|---|
InternalAddRef |
インクリメントは、スレッド セーフではありません。 |
インクリメントは、スレッド セーフです。 |
Lock |
ロックするクリティカル セクションがないので、何の処理も行いません。 |
ロックするクリティカル セクションがないので、何の処理も行いません。 |
必要条件
**ヘッダー:**atlbase.h
参照
参照
CComMultiThreadModel::ThreadModelNoCS