Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Knihovna ATL (Active Template Library) se nadále podporuje. Už ale nepřidáme funkce ani aktualizujeme dokumentaci.
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 prostřednictvím jednoho ze dvou názvů typedef, CComObjectThreadModel nebo 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 AutoCriticalSectionodkazuje:
| Třída definovaná v | Odkazovaná třída |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Kromě AutoCriticalSectiontoho 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í CComMultiThreadModelodkazuje 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 CriticalSectionodkazuje:
| 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í CComMultiThreadModelodkazuje 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 ThreadModelNoCSodkazuje:
| 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