Condividi tramite


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

Vedere anche

Riferimenti

Classe di CComMultiThreadModel

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS