Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Sie CComMultiThreadModel über einen von zwei typedef Namen, entweder CComObjectThreadModel oder 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 CComMultiThreadModelverweist die typedef Namensklasse AutoCriticalSectionCComAutoCriticalSection, 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 AutoCriticalSectionkö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 LockThreadModel 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 CComMultiThreadModelverweist die typedef Namensklasse CriticalSectionCComCriticalSection, 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 CriticalSectionkö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 CComMultiThreadModelverweist die typedef Namensklasse ThreadModelNoCSCComMultiThreadModelNoCS.
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