Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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