CComMultiThreadModel::AutoCriticalSection
Quando si utilizza CComMultiThreadModel, i riferimenti AutoCriticalSection nome typedef classe CComAutoCriticalSection, che fornisce metodi per ottenere e il rilascio della proprietà di un oggetto sezione critica.
typedef CComAutoCriticalSection AutoCriticalSection;
Note
CComSingleThreadModel e CComMultiThreadModelNoCS contengono le definizioni per AutoCriticalSection.Nella tabella seguente è illustrata la relazione tra la classe del modello di threading e la classe della sezione critica fatto riferimento da AutoCriticalSection:
Classe definita in |
Classe di riferimento |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Oltre a AutoCriticalSection, è possibile utilizzare il nome CriticalSectiondi typedef.Non è necessario specificare AutoCriticalSection in oggetti globali o membri di classe statici per eliminare il codice di avvio CRT.
Esempio
Il codice seguente viene modellata in base a CComObjectRootExe viene illustrato AutoCriticalSection utilizzato in un ambiente di threading.
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;
};
Di seguito vengono illustrati i risultati dei metodi Lock e InternalAddRef, come il parametro di modello ThreadModel e il modello di threading utilizzati dall'applicazione:
ThreadModel = CComObjectThreadModel
Metodo |
Scegliere o threading apartment |
Modello di threading Free |
---|---|---|
InternalAddRef |
l'incremento non è thread-safe. |
l'incremento è thread-safe. |
Lock |
Non esegue alcuna operazione; non esiste una sezione critica da blocco. |
La sezione critica è bloccata. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
Metodo |
Scegliere o threading apartment |
Modello di threading Free |
---|---|---|
InternalAddRef |
l'incremento non è thread-safe. |
l'incremento è thread-safe. |
Lock |
Non esegue alcuna operazione; non esiste una sezione critica da blocco. |
Non esegue alcuna operazione; non esiste una sezione critica da blocco. |
Requisiti
Header: atlbase.h