Delen via


CComMultiThreadModel-klasse

CComMultiThreadModel biedt threadveilige methoden voor het verhogen en verlagen van de waarde van een variabele.

Syntaxis

class CComMultiThreadModel

Leden

Openbare typedefs

Naam Beschrijving
CComMultiThreadModel::AutoCriticalSection Verwijzingenklasse CComAutoCriticalSection.
CComMultiThreadModel::CriticalSection Verwijzingenklasse CComCriticalSection.
CComMultiThreadModel::ThreadModelNoCS- Verwijzingenklasse CComMultiThreadModelNoCS-.

Openbare methoden

Naam Beschrijving
CComMultiThreadModel::D ecrement (Statisch) De waarde van de opgegeven variabele op een threadveilige manier verlagen.
CComMultiThreadModel::Increment (Statisch) Hiermee wordt de waarde van de opgegeven variabele op een threadveilige manier verhoogd.

Opmerkingen

Normaal gesproken gebruikt u CComMultiThreadModel via een van de twee typedef namen, ofwel CComObjectThreadModel of CComGlobalsThreadModel. De klasse waarnaar wordt verwezen door elke typedef is afhankelijk van het gebruikte threadingmodel, zoals wordt weergegeven in de volgende tabel:

typedef Eén threading Appartementthreading Gratis threading
CComObjectThreadModel S S M
CComGlobalsThreadModel S M M

S = CComSingleThreadModel; M= CComMultiThreadModel

CComMultiThreadModel zelf definieert drie typedef namen. AutoCriticalSection en CriticalSection referentieklassen die methoden bieden voor het verkrijgen en vrijgeven van het eigendom van een kritieke sectie. ThreadModelNoCS verwijst naar klasse [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).

Eisen

header: atlbase.h

CComMultiThreadModel::AutoCriticalSection

Wanneer u CComMultiThreadModelgebruikt, verwijst de typedef naam AutoCriticalSection klasse CComAutoCriticalSection, die methoden biedt voor het verkrijgen en vrijgeven van het eigendom van een kritiek sectieobject.

typedef CComAutoCriticalSection AutoCriticalSection;

Opmerkingen

CComSingleThreadModel en CComMultiThreadModelNoCS- bevatten ook definities voor AutoCriticalSection. In de volgende tabel ziet u de relatie tussen de threadingmodelklasse en de kritieke sectieklasse waarnaar wordt verwezen door AutoCriticalSection:

Klasse gedefinieerd in Klasse waarnaar wordt verwezen
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

Naast AutoCriticalSectionkunt u de typedef naam CriticalSectiongebruiken. U moet geen AutoCriticalSection opgeven in globale objecten of statische klasseleden als u de CRT-opstartcode wilt elimineren.

Voorbeeld

De volgende code wordt gemodelleerd na CComObjectRootExen demonstreert AutoCriticalSection worden gebruikt in een threading-omgeving.

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 de volgende tabellen ziet u de resultaten van de methoden InternalAddRef en Lock, afhankelijk van de parameter ThreadModel sjabloon en het threadingmodel dat door de toepassing wordt gebruikt:

ThreadModel = CComObjectThreadModel

Methode Eén of appartement threading Gratis threading
InternalAddRef De increment is niet thread-safe. De increment is thread-safe.
Lock Doet niets; er is geen kritieke sectie om te vergrendelen. De kritieke sectie is vergrendeld.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

Methode Eén of appartement threading Gratis threading
InternalAddRef De increment is niet thread-safe. De increment is thread-safe.
Lock Doet niets; er is geen kritieke sectie om te vergrendelen. Doet niets; er is geen kritieke sectie om te vergrendelen.

CComMultiThreadModel::CriticalSection

Wanneer u CComMultiThreadModelgebruikt, verwijst de typedef naam CriticalSection klasse CComCriticalSection, die methoden biedt voor het verkrijgen en vrijgeven van het eigendom van een kritiek sectieobject.

typedef CComCriticalSection CriticalSection;

Opmerkingen

CComSingleThreadModel en CComMultiThreadModelNoCS- bevatten ook definities voor CriticalSection. In de volgende tabel ziet u de relatie tussen de threadingmodelklasse en de kritieke sectieklasse waarnaar wordt verwezen door CriticalSection:

Klasse gedefinieerd in Klasse waarnaar wordt verwezen
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

Naast CriticalSectionkunt u de typedef naam AutoCriticalSectiongebruiken. U moet geen AutoCriticalSection opgeven in globale objecten of statische klasseleden als u de CRT-opstartcode wilt elimineren.

Voorbeeld

Zie CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModel::D ecrement

Met deze statische functie wordt de Win32-functie aangeroepen InterlockedDecrement, waardoor de waarde van de variabele wordt verminderd waarnaar wordt verwezen door p.

static ULONG WINAPI Decrement(LPLONG p) throw ();

Parameters

p
[in] Wijs de variabele aan die moet worden afgebroken.

Retourwaarde

Als het resultaat van de afschaking 0 is, geeft Decrement 0 als resultaat. Als het resultaat van de degradatie niet nul is, is de retourwaarde ook niet-nul, maar is deze mogelijk niet gelijk aan het resultaat van de afzetting.

Opmerkingen

InterlockedDecrement voorkomt dat meerdere threads tegelijkertijd deze variabele gebruiken.

CComMultiThreadModel::Increment

Met deze statische functie wordt de Win32-functie aangeroepen InterlockedIncrement, waarmee de waarde van de variabele wordt verhoogd waarnaar wordt verwezen door p.

static ULONG WINAPI Increment(LPLONG p) throw ();

Parameters

p
[in] Wijs de variabele aan die moet worden verhoogd.

Retourwaarde

Als het resultaat van de verhoging 0 is, retourneert Increment 0. Als het resultaat van de verhoging niet-nul is, is de retourwaarde ook niet-nul, maar is deze mogelijk niet gelijk aan het resultaat van de verhoging.

Opmerkingen

InterlockedIncrement voorkomt dat meerdere threads tegelijkertijd deze variabele gebruiken.

CComMultiThreadModel::ThreadModelNoCS

Wanneer u CComMultiThreadModelgebruikt, verwijst de typedef naam ThreadModelNoCSCComMultiThreadModelNoCS-.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Opmerkingen

CComMultiThreadModelNoCS biedt threadveilige methoden voor het verhogen en verlagen van een variabele; het biedt echter geen kritieke sectie.

CComSingleThreadModel en CComMultiThreadModelNoCS bevatten ook definities voor ThreadModelNoCS. In de volgende tabel ziet u de relatie tussen de threadingmodelklasse en de klasse waarnaar wordt verwezen door ThreadModelNoCS:

Klasse gedefinieerd in Klasse waarnaar wordt verwezen
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel
CComMultiThreadModelNoCS CComMultiThreadModelNoCS

Voorbeeld

Zie CComMultiThreadModel::AutoCriticalSection.

Zie ook

CComSingleThreadModel Class
CComAutoCriticalSection-klasse
CComCriticalSection-klasse
Class Overview