CComMultiThreadModel::AutoCriticalSection
當使用時, CComMultiThreadModeltypedef 名稱 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 樣板參數:
ThreadModel = CComObjectThreadModel
方法 |
單一執行緒 Apartment 或 |
釋放執行緒 |
---|---|---|
InternalAddRef |
將不是安全執行緒。 |
將具備執行緒安全。 |
Lock |
不會執行;未鎖定的關鍵區段。 |
關鍵區段鎖定。 |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
方法 |
單一執行緒 Apartment 或 |
釋放執行緒 |
---|---|---|
InternalAddRef |
將不是安全執行緒。 |
將具備執行緒安全。 |
Lock |
不會執行;未鎖定的關鍵區段。 |
不會執行;未鎖定的關鍵區段。 |
需求
Header: atlbase.h