CComMultiThreadModel::AutoCriticalSection

Wenn Sie CComMultiThreadModel verwenden, der typedef-Name AutoCriticalSection referenziert Klasse CComAutoCriticalSection, die Methoden für das Abrufen und Freigeben des Besitzes eines kritischen Abschnittsobjekts bereitstellt.

typedef CComAutoCriticalSection AutoCriticalSection;

Hinweise

CComSingleThreadModel und CComMultiThreadModelNoCS enthalten auch Definitionen für AutoCriticalSection.In der folgenden Tabelle wird die Beziehung zwischen der Threadingmodellklasse und der Klasse des kritischen Abschnitts an, die von AutoCriticalSection verwiesen werden:

Klasse in definiert

Klasse verwiesen

CComMultiThreadModel

CComCriticalSection

CComSingleThreadModel

CComFakeCriticalSection

CComMultiThreadModelNoCS

CComFakeCriticalSection

Zusätzlich zu AutoCriticalSection können Sie den Namen typedefCriticalSection verwenden.Sie sollten AutoCriticalSection in den globalen Objekten oder in statischen Klassenmember nicht angeben, wenn Sie den CRT-Startcode vermeiden möchten.

Beispiel

Der folgende Code wird nach CComObjectRootEx erstellt und AutoCriticalSection zeigt, das in einer Threadingumgebung verwendet wird.

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;
};

Die folgenden Tabellen zeigen die Ergebnisse der InternalAddRef und Lock-Methoden, je nach ThreadModel Vorlagenparameter und dem Threadingmodell an, die von der Anwendung verwendet werden:

ThreadModel = CComObjectThreadModel

Methode

Eine einzige Sie oder Apartmentthreading aus

Freethreading

InternalAddRef

Das Inkrement ist nicht threadsicher.

Das Inkrement ist threadsicher.

Lock

Keine Auswirkung; es gibt keinen zu sperren kritischen Abschnitt.

Der kritischen Abschnitt ist gesperrt.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

Methode

Eine einzige Sie oder Apartmentthreading aus

Freethreading

InternalAddRef

Das Inkrement ist nicht threadsicher.

Das Inkrement ist threadsicher.

Lock

Keine Auswirkung; es gibt keinen zu sperren kritischen Abschnitt.

Keine Auswirkung; es gibt keinen zu sperren kritischen Abschnitt.

Anforderungen

Header: atlbase.h

Siehe auch

Referenz

CComMultiThreadModel-Klasse

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS