Freigeben über


CComMultiThreadModelNoCS-Klasse

CComMultiThreadModelNoCS stellt threadsichere Methoden zum Inkrementieren und Verringern des Werts einer Variablen bereit, ohne dass wichtige Abschnittssperrungs- oder Entsperrungsfunktionen erforderlich sind.

Syntax

class CComMultiThreadModelNoCS

Member

Öffentliche Typedefs

Name Beschreibung
CComMultiThreadModelNoCS::AutoCriticalSection References-Klasse CComFakeCriticalSection.
CComMultiThreadModelNoCS::CriticalSection References-Klasse CComFakeCriticalSection.
CComMultiThreadModelNoCS::ThreadModelNoCS References-Klasse CComMultiThreadModelNoCS.

Öffentliche Methoden

Name Beschreibung
CComMultiThreadModelNoCS::D ecrement (Statisch) Erhöht den Wert der angegebenen Variablen auf threadsichere Weise.
CComMultiThreadModelNoCS::Increment (Statisch) Erhöht den Wert der angegebenen Variablen auf threadsichere Weise.

Hinweise

CComMultiThreadModelNoCSähnelt CComMultiThreadModel darin, dass es threadsichere Methoden zum Inkrementieren und Dekrementieren einer Variablen bereitstellt. Wenn Sie jedoch auf eine kritische Abschnittsklasse verweisen, führen CComMultiThreadModelNoCSMethoden wie Lock z. B. nichts Unlock aus.

In der Regel verwenden CComMultiThreadModelNoCS Sie den ThreadModelNoCS typedef Namen. Dies typedef wird in CComMultiThreadModelNoCS, CComMultiThreadModelund CComSingleThreadModel definiert.

Hinweis

Die globalen typedef Namen CComObjectThreadModel und CComGlobalsThreadModel verweisen nicht auf CComMultiThreadModelNoCS.

Zusätzlich zu ThreadModelNoCS, CComMultiThreadModelNoCS definiert AutoCriticalSection und CriticalSection. Diese beiden typedef Namen verweisen auf CComFakeCriticalSection, die leere Methoden zum Abrufen und Freigeben eines kritischen Abschnitts bereitstellt.

Anforderungen

Kopfzeile: atlbase.h

CComMultiThreadModelNoCS::AutoCriticalSection

Bei Verwendung CComMultiThreadModelNoCSverweist der Name AutoCriticalSection auf die typedef Klasse CComFakeCriticalSection.

typedef CComFakeCriticalSection AutoCriticalSection;

Hinweise

Da CComFakeCriticalSection kein kritischer Abschnitt bereitgestellt wird, tun die Methoden nichts.

CComMultiThreadModel und CComSingleThreadModel 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
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComAutoCriticalSection
CComSingleThreadModel 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

Siehe CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::CriticalSection

Bei Verwendung CComMultiThreadModelNoCSverweist der Name CriticalSection auf die typedef Klasse CComFakeCriticalSection.

typedef CComFakeCriticalSection CriticalSection;

Hinweise

Da CComFakeCriticalSection kein kritischer Abschnitt bereitgestellt wird, tun die Methoden nichts.

CComMultiThreadModel und CComSingleThreadModel 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
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection

Zusätzlich dazu CriticalSectionkönnen Sie den typedef Namen AutoCriticalSectionverwenden. Sie sollten nicht in globalen Objekten oder statischen Klassenmitgliedern angeben AutoCriticalSection , wenn Sie den CRT-Startcode entfernen möchten.

Beispiel

Siehe CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::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.

CComMultiThreadModelNoCS::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, gibt Increment 0 zurück. 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.

CComMultiThreadModelNoCS::ThreadModelNoCS

Bei Verwendung CComMultiThreadModelNoCSverweist der typedef Name ThreadModelNoCS einfach auf CComMultiThreadModelNoCS.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Hinweise

CComMultiThreadModel und CComSingleThreadModel enthalten 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
CComMultiThreadModelNoCS CComMultiThreadModelNoCS
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel

Beachten Sie, dass die Definition von ThreadModelNoCS in CComMultiThreadModelNoCS Symmetrie mit CComMultiThreadModel und CComSingleThreadModel. Nehmen wir beispielsweise an, der Beispielcode in CComMultiThreadModel::AutoCriticalSection der typedeffolgenden Deklarierten:

typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;

Unabhängig von der für ThreadModel (z CComMultiThreadModelNoCS. B. ) _ThreadModel angegebenen Klasse wird entsprechend aufgelöst.

Beispiel

Siehe CComMultiThreadModel::AutoCriticalSection.

Siehe auch

Klassenübersicht