Share via


CComMultiThreadModel::AutoCriticalSection

當使用時, CComMultiThreadModeltypedef 名稱 AutoCriticalSection 參考將 CComAutoCriticalSection,用於取得和釋放關鍵區段物件擁有權的方法。

typedef CComAutoCriticalSection AutoCriticalSection;

備註

CComSingleThreadModelCComMultiThreadModelNoCS 也包含 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 樣板參數:

ThreadModel = CComObjectThreadModel

方法

單一執行緒 Apartment 或

釋放執行緒

InternalAddRef

將不是安全執行緒。

將具備執行緒安全。

Lock

不會執行;未鎖定的關鍵區段。

關鍵區段鎖定。

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

方法

單一執行緒 Apartment 或

釋放執行緒

InternalAddRef

將不是安全執行緒。

將具備執行緒安全。

Lock

不會執行;未鎖定的關鍵區段。

不會執行;未鎖定的關鍵區段。

需求

Header: atlbase.h

請參閱

參考

CComMultiThreadModel 類別

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS