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