Sdílet prostřednictvím


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 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