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