CComMultiThreadModel-Klasse
CComMultiThreadModel
stellt threadsichere Methoden zum Erhöhen und Verringern des Werts einer Variablen bereit.
Syntax
class CComMultiThreadModel
Member
Öffentliche Typedefs
Name | Beschreibung |
---|---|
CComMultiThreadModel::AutoCriticalSection | References-Klasse CComAutoCriticalSection. |
CComMultiThreadModel::CriticalSection | References-Klasse CComCriticalSection. |
CComMultiThreadModel::ThreadModelNoCS | References-Klasse CComMultiThreadModelNoCS. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CComMultiThreadModel::D ecrement | (Statisch) Erhöht den Wert der angegebenen Variablen auf threadsichere Weise. |
CComMultiThreadModel::Increment | (Statisch) Erhöht den Wert der angegebenen Variablen auf threadsichere Weise. |
Hinweise
In der Regel verwenden CComMultiThreadModel
Sie einen von zwei typedef
Namen, entweder [CComObjectThreadModel](atl-typedefs.md#ccomobjectthreadmodel oder [CComGlobalsThreadModel](atl-typedefs.md#ccomglobalsthreadmodel). Die klasse, auf die von jedem typedef
verwiesen wird, hängt vom verwendeten Threadingmodell ab, wie in der folgenden Tabelle dargestellt:
typedef | Single Threading | Apartmentthreading | Freithreading |
---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel
; M= CComMultiThreadModel
CComMultiThreadModel
selbst definiert drei typedef
Namen. AutoCriticalSection
und CriticalSection
Referenzklassen, die Methoden zum Abrufen und Freigeben des Besitzes eines kritischen Abschnitts bereitstellen. ThreadModelNoCS
references class [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Anforderungen
Kopfzeile: atlbase.h
CComMultiThreadModel::AutoCriticalSection
Bei Verwendung CComMultiThreadModel
verweist die typedef
Namensklasse AutoCriticalSection
CComAutoCriticalSection, die Methoden zum Abrufen und Freigeben des Besitzes eines kritischen Abschnittsobjekts bereitstellt.
typedef CComAutoCriticalSection AutoCriticalSection;
Hinweise
CComSingleThreadModel und CComMultiThreadModelNoCS enthalten auch Definitionen für AutoCriticalSection
. Die folgende Tabelle zeigt die Beziehung zwischen der Threadingmodellklasse und der kritischen Abschnittsklasse, auf die verwiesen wird:AutoCriticalSection
Klasse definiert in | Auf die Klasse verwiesen wird |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Zusätzlich dazu AutoCriticalSection
können Sie den typedef
Namen CriticalSection verwenden. Sie sollten nicht in globalen Objekten oder statischen Klassenmitgliedern angeben AutoCriticalSection
, wenn Sie den CRT-Startcode entfernen möchten.
Beispiel
Der folgende Code wird nach CComObjectRootEx modelliert und veranschaulicht AutoCriticalSection
die Verwendung in einer Threadingumgebung.
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;
In den folgenden Tabellen sind die Ergebnisse der InternalAddRef
Vorlagenparameter und Lock
ThreadModel
Methoden sowie das von der Anwendung verwendete Threadingmodell dargestellt:
ThreadModel = CComObjectThreadModel
Methode | Single- oder Apartmentthreading | Free Threading |
---|---|---|
InternalAddRef |
Die Inkrementierung ist nicht threadsicher. | Die Inkrementierung ist threadsicher. |
Lock |
Macht nichts; es ist kein kritischer Abschnitt zum Sperren vorhanden. | Der kritische Abschnitt ist gesperrt. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
Methode | Single- oder Apartmentthreading | Free Threading |
---|---|---|
InternalAddRef |
Die Inkrementierung ist nicht threadsicher. | Die Inkrementierung ist threadsicher. |
Lock |
Macht nichts; es ist kein kritischer Abschnitt zum Sperren vorhanden. | Macht nichts; es ist kein kritischer Abschnitt zum Sperren vorhanden. |
CComMultiThreadModel::CriticalSection
Bei Verwendung CComMultiThreadModel
verweist die typedef
Namensklasse CriticalSection
CComCriticalSection, die Methoden zum Abrufen und Freigeben des Besitzes eines kritischen Abschnittsobjekts bereitstellt.
typedef CComCriticalSection CriticalSection;
Hinweise
CComSingleThreadModel und CComMultiThreadModelNoCS enthalten auch Definitionen für CriticalSection
. Die folgende Tabelle zeigt die Beziehung zwischen der Threadingmodellklasse und der kritischen Abschnittsklasse, auf die verwiesen wird:CriticalSection
Klasse definiert in | Auf die Klasse verwiesen wird |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Zusätzlich dazu CriticalSection
können Sie den typedef
Namen AutoCriticalSection verwenden. Sie sollten nicht in globalen Objekten oder statischen Klassenmitgliedern angeben AutoCriticalSection
, wenn Sie den CRT-Startcode entfernen möchten.
Beispiel
Siehe CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModel::D ecrement
Diese statische Funktion ruft die Win32-Funktion InterlockedDecrement auf, wodurch der Wert der Variablen verringert wird, auf die von p verwiesen wird.
static ULONG WINAPI Decrement(LPLONG p) throw ();
Parameter
p
[in] Zeiger auf die Variable, die dekrementiert werden soll.
Rückgabewert
Wenn das Ergebnis der Dekrementierung 0 ist, wird Decrement
0 zurückgegeben. Wenn das Ergebnis der Dekrementierung ungleich Null ist, ist der Rückgabewert auch nicht gleich dem Ergebnis der Dekrementierung.
Hinweise
InterlockedDecrement
verhindert, dass mehr als ein Thread gleichzeitig diese Variable verwendet.
CComMultiThreadModel::Increment
Diese statische Funktion ruft die Win32-Funktion InterlockedIncrement auf, wodurch der Wert der Variablen erhöht wird, auf die von p verwiesen wird.
static ULONG WINAPI Increment(LPLONG p) throw ();
Parameter
p
[in] Zeiger auf die Variable, die erhöht werden soll.
Rückgabewert
Wenn das Ergebnis des Inkrements 0 ist, wird Increment
0 zurückgegeben. Wenn das Ergebnis des Inkrements ungleich Null ist, ist der Rückgabewert auch nicht null, kann aber nicht gleich dem Ergebnis des Inkrements sein.
Hinweise
InterlockedIncrement
verhindert, dass mehr als ein Thread gleichzeitig diese Variable verwendet.
CComMultiThreadModel::ThreadModelNoCS
Bei Verwendung CComMultiThreadModel
verweist die typedef
Namensklasse ThreadModelNoCS
CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Hinweise
CComMultiThreadModelNoCS
stellt threadsichere Methoden zum Inkrementieren und Dekrementieren einer Variablen bereit; Es stellt jedoch keinen kritischen Abschnitt bereit.
CComSingleThreadModel und CComMultiThreadModelNoCS
enthält auch Definitionen für ThreadModelNoCS
. Die folgende Tabelle zeigt die Beziehung zwischen der Threadingmodellklasse und der Klasse, auf die verwiesen wird:ThreadModelNoCS
Klasse definiert in | Auf die Klasse verwiesen wird |
---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Beispiel
Siehe CComMultiThreadModel::AutoCriticalSection.
Siehe auch
CComSingleThreadModel-Klasse
CComAutoCriticalSection-Klasse
CComCriticalSection-Klasse
Klassenübersicht