CComMultiThreadModel::AutoCriticalSection
Při použití CComMultiThreadModel , typedef název AutoCriticalSection odkazuje na třídu CComAutoCriticalSection, který poskytuje metody pro získání a uvolnění vlastnictví objektu kritický oddíl.
typedef CComAutoCriticalSection AutoCriticalSection;
Poznámky
CComSingleThreadModel a CComMultiThreadModelNoCS také obsahují definice pro AutoCriticalSection .Následující tabulka zobrazuje vztah mezi podprocesů třídy modelu a kritické části odkazuje AutoCriticalSection :
Třídy definované v |
Třída odkazuje |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Kromě AutoCriticalSection , můžete použít typedef název CriticalSection.Neměli byste zadávat AutoCriticalSection v globální objekty nebo členy statických tříd, pokud chcete eliminovat CRT spouštěcí kód.
Příklad
Následující kód je modelovat po CComObjectRootExa AutoCriticalSection v podprocesu prostředí.
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;
};
Následující tabulky popisují výsledky InternalAddRef a Lock metod v závislosti na ThreadModel parametr šablony a aplikace používá model podprocesu:
ThreadModel = CComObjectThreadModel
Metoda |
Single nebo podprocesový model Apartment |
Volné zřetězení |
---|---|---|
InternalAddRef |
Přírůstek není podprocesu. |
Přírůstek je podprocesu. |
Lock |
Neprovede žádnou akci; neexistuje kritický oddíl zamknout. |
Kritické sekce je uzamčena. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
Metoda |
Single nebo podprocesový model Apartment |
Volné zřetězení |
---|---|---|
InternalAddRef |
Přírůstek není podprocesu. |
Přírůstek je podprocesu. |
Lock |
Neprovede žádnou akci; neexistuje kritický oddíl zamknout. |
Neprovede žádnou akci; neexistuje kritický oddíl zamknout. |
Požadavky
Záhlaví: atlbase.h