次の方法で共有


CComMultiThreadModel::AutoCriticalSection

CComMultiThreadModel の使用中に、typedef 名 AutoCriticalSectionCComAutoCriticalSection クラスを参照します。このクラスには、クリティカル セクション オブジェクトの所有権を取得および解放するためのメソッドが用意されています。

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 クラス

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS

その他の技術情報

CComMultiThreadModel のメンバー