CComMultiThreadModel – třída
CComMultiThreadModel
poskytuje metody bezpečné pro přístup z více vláken a dekrementace hodnoty proměnné.
Syntaxe
class CComMultiThreadModel
Členové
Veřejné definice typedef
Název | Popis |
---|---|
CComMultiThreadModel::AutoCriticalSection | Odkazuje na třídu CComAutoCriticalSection. |
CComMultiThreadModel::CriticalSection | Odkazuje na třídu CComCriticalSection. |
CComMultiThreadModel::ThreadModelNoCS | Odkazuje na třídu CComMultiThreadModelNoCS. |
Veřejné metody
Název | Popis |
---|---|
CComMultiThreadModel::D ekrementace | (Statické) Sníží hodnotu zadané proměnné bezpečným způsobem. |
CComMultiThreadModel::Increment | (Statické) Zvýší hodnotu zadané proměnné bezpečným způsobem. |
Poznámky
Obvykle používáte CComMultiThreadModel
jeden ze dvou typedef
názvů, buď [CComObjectThreadModel](atl-typedefs.md#ccomobjectthreadmodel nebo [CComGlobalsThreadModel](atl-typedefs.md#ccomglobalsthreadmodel. Třída odkazovaná jednotlivými typedef
třídami závisí na použitém modelu vláken, jak je znázorněno v následující tabulce:
– definice typedef | Jedno vlákno | Vlákno bytu | Volné vlákno |
---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel
; M= CComMultiThreadModel
CComMultiThreadModel
sama definuje tři typedef
názvy. AutoCriticalSection
a CriticalSection
referenční třídy, které poskytují metody pro získání a uvolnění vlastnictví kritického oddílu. ThreadModelNoCS
reference třída [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Požadavky
Hlavička: atlbase.h
CComMultiThreadModel::AutoCriticalSection
Při použití CComMultiThreadModel
, typedef
název AutoCriticalSection
odkazuje třídy CComAutoCriticalSection, která poskytuje metody pro získání a uvolnění vlastnictví kritického objektu oddílu.
typedef CComAutoCriticalSection AutoCriticalSection;
Poznámky
CComSingleThreadModel a CComMultiThreadModelNoCS také obsahují definice pro AutoCriticalSection
. Následující tabulka ukazuje vztah mezi třídou modelu threadingu a kritickou třídou oddílu, na kterou AutoCriticalSection
odkazuje:
Třída definovaná v | Odkazovaná třída |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Kromě AutoCriticalSection
toho můžete použít typedef
název CriticalSection. Pokud chcete odstranit spouštěcí kód CRT, neměli byste je zadávat AutoCriticalSection
v globálních objektech ani ve statických členech třídy.
Příklad
Následující kód je modelován po CComObjectRootEx a demonstruje AutoCriticalSection
použití v prostředí vláken.
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;
Následující tabulky ukazují výsledky InternalAddRef
a Lock
metody v závislosti na ThreadModel
parametru šablony a modelu vláken používaném aplikací:
ThreadModel = CComObjectThreadModel
metoda | Jednoúčelové vlákno nebo vlákno apartmánu | Volné vlákno |
---|---|---|
InternalAddRef |
Přírůstek není bezpečný pro přístup z více vláken. | Přírůstek je bezpečný pro přístup z více vláken. |
Lock |
Nedělá nic; neexistuje žádný kritický oddíl k uzamčení. | Kritický oddíl je uzamčený. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
metoda | Jednoúčelové vlákno nebo vlákno apartmánu | Volné vlákno |
---|---|---|
InternalAddRef |
Přírůstek není bezpečný pro přístup z více vláken. | Přírůstek je bezpečný pro přístup z více vláken. |
Lock |
Nedělá nic; neexistuje žádný kritický oddíl k uzamčení. | Nedělá nic; neexistuje žádný kritický oddíl k uzamčení. |
CComMultiThreadModel::CriticalSection
Při použití CComMultiThreadModel
odkazuje typedef
název CriticalSection
třídy CComCriticalSection, která poskytuje metody pro získání a uvolnění vlastnictví kritického objektu oddílu.
typedef CComCriticalSection CriticalSection;
Poznámky
CComSingleThreadModel a CComMultiThreadModelNoCS také obsahují definice pro CriticalSection
. Následující tabulka ukazuje vztah mezi třídou modelu threadingu a kritickou třídou oddílu, na kterou CriticalSection
odkazuje:
Třída definovaná v | Odkazovaná třída |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Kromě CriticalSection
, můžete použít typedef
název AutoCriticalSection. Pokud chcete odstranit spouštěcí kód CRT, neměli byste je zadávat AutoCriticalSection
v globálních objektech ani ve statických členech třídy.
Příklad
Viz CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModel::D ekrementace
Tato statická funkce volá funkci Win32 InterlockedDecrement, která dekrementuje hodnotu proměnné, na kterou odkazuje p.
static ULONG WINAPI Decrement(LPLONG p) throw ();
Parametry
p
[v] Ukazatel na proměnnou, která se má dekrementovat.
Návratová hodnota
Pokud je výsledek dekrementu 0, Decrement
vrátí hodnotu 0. Pokud je výsledek dekrementu nenulový, návratová hodnota je také nenulová, ale nemusí se rovnat výsledku dekrementu.
Poznámky
InterlockedDecrement
zabraňuje současnému použití této proměnné více než jedno vlákno.
CComMultiThreadModel::Increment
Tato statická funkce volá funkci Win32 InterlockedIncrement, která zvýší hodnotu proměnné, na kterou odkazuje p.
static ULONG WINAPI Increment(LPLONG p) throw ();
Parametry
p
[v] Ukazatel na proměnnou, která se má zvýšit.
Návratová hodnota
Pokud je výsledek přírůstku 0, Increment
vrátí hodnotu 0. Pokud je výsledek přírůstku nenulový, návratová hodnota je také nenulová, ale nemusí se rovnat výsledku přírůstku.
Poznámky
InterlockedIncrement
zabraňuje současnému použití této proměnné více než jedno vlákno.
CComMultiThreadModel::ThreadModelNoCS
Při použití CComMultiThreadModel
odkazuje na typedef
název ThreadModelNoCS
třídy CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Poznámky
CComMultiThreadModelNoCS
poskytuje metody bezpečné pro přístup z více vláken a dekrementace proměnné; neposkytuje však kritickou část.
CComSingleThreadModel a CComMultiThreadModelNoCS
také obsahují definice pro ThreadModelNoCS
. Následující tabulka ukazuje vztah mezi třídou modelu threadingu a třídou, na kterou ThreadModelNoCS
odkazuje:
Třída definovaná v | Odkazovaná třída |
---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Příklad
Viz CComMultiThreadModel::AutoCriticalSection.
Viz také
CComSingleThreadModel – třída
CComAutoCriticalSection – třída
CComAutoCriticalSection – třída
Přehled třídy