Megosztás a következőn keresztül:


CComMultiThreadModel osztály

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

CComMultiThreadModel szálbiztos metódusokat biztosít egy változó értékének növeléséhez és csökkenéséhez.

Szintaxis

class CComMultiThreadModel

Tagok

Nyilvános typedefs

Név Leírás
CComMultiThreadModel::AutoCriticalSection A CComAutoCriticalSection osztály hivatkozásai.
CComMultiThreadModel::CriticalSection Hivatkozások CComCriticalSectionosztályra.
CComMultiThreadModel::ThreadModelNoCS A CComMultiThreadModelNoCS osztály hivatkozásai.

Nyilvános metódusok

Név Leírás
CComMultiThreadModel::D ecrement (Statikus) A megadott változó értékét szálbiztos módon dekreálja.
CComMultiThreadModel::Növekményes (Statikus) A megadott változó értékét szálbiztos módon növeli.

Megjegyzések

Általában a CComObjectThreadModel typedef két egyikén keresztül . Az egyes typedef által hivatkozott osztály a használt szálmodelltől függ, ahogyan az a következő táblázatban látható:

typedef Egyszálas Lakás szálkezelése Ingyenes szálkezelés
CComObjectThreadModel S S M
CComGlobalsThreadModel S M M

S = CComSingleThreadModel; M= CComMultiThreadModel

CComMultiThreadModel maga három typedef nevet határoz meg. AutoCriticalSection és CriticalSection referenciaosztályokat, amelyek metódusokat biztosítanak egy kritikus szakasz tulajdonjogának megszerzéséhez és kiadásához. ThreadModelNoCS hivatkozási osztály [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).

Követelmények

fejléc: atlbase.h

CComMultiThreadModel::AutoCriticalSection

A CComMultiThreadModelhasználatakor a typedef név AutoCriticalSection a CComAutoCriticalSection osztályra hivatkozik, amely metódusokat biztosít egy kritikus szakaszobjektum tulajdonjogának megszerzéséhez és kiadásához.

typedef CComAutoCriticalSection AutoCriticalSection;

Megjegyzések

CComSingleThreadModel és CComMultiThreadModelNoCS a AutoCriticalSectiondefinícióit is tartalmazzák. Az alábbi táblázat a szálmodell-osztály és a AutoCriticalSectionáltal hivatkozott kritikus szakaszosztály közötti kapcsolatot mutatja be:

A következőben definiált osztály: Hivatkozott osztály
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

A AutoCriticalSectionmellett használhatja a typedef nevét CriticalSection. Ha meg szeretné szüntetni a CRT indítási kódját, ne adjon meg AutoCriticalSection globális objektumokban vagy statikus osztálytagokban.

Példa

A következő kód a CComObjectRootEx után modellezhető, és bemutatja, AutoCriticalSection használnak szálkezeléses környezetben.

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;

Az alábbi táblázatok a InternalAddRef és Lock metódusok eredményeit mutatják be az alkalmazás által használt ThreadModel sablonparamétertől és szálmodelltől függően:

ThreadModel = CComObjectThreadModel

Módszer Egy- vagy apartmanszálas Ingyenes szálkezelés
InternalAddRef A növekmény nem szálbiztos. A növekmény szálbiztos.
Lock Nem csinál semmit; nincs zárolandó kritikus szakasz. A kritikus szakasz zárolva van.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

Módszer Egy- vagy apartmanszálas Ingyenes szálkezelés
InternalAddRef A növekmény nem szálbiztos. A növekmény szálbiztos.
Lock Nem csinál semmit; nincs zárolandó kritikus szakasz. Nem csinál semmit; nincs zárolandó kritikus szakasz.

CComMultiThreadModel::CriticalSection

A CComMultiThreadModelhasználatakor a typedef név CriticalSection a CComCriticalSection osztályra hivatkozik, amely metódusokat biztosít egy kritikus szakaszobjektum tulajdonjogának megszerzéséhez és kiadásához.

typedef CComCriticalSection CriticalSection;

Megjegyzések

CComSingleThreadModel és CComMultiThreadModelNoCS a CriticalSectiondefinícióit is tartalmazzák. Az alábbi táblázat a szálmodell-osztály és a CriticalSectionáltal hivatkozott kritikus szakaszosztály közötti kapcsolatot mutatja be:

A következőben definiált osztály: Hivatkozott osztály
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection
CComMultiThreadModelNoCS CComFakeCriticalSection

A CriticalSectionmellett használhatja a typedef nevét AutoCriticalSection. Ha meg szeretné szüntetni a CRT indítási kódját, ne adjon meg AutoCriticalSection globális objektumokban vagy statikus osztálytagokban.

Példa

Lásd CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModel::D ecrement

Ez a statikus függvény meghívja a Win32 függvényt InterlockedDecrement, amely a páltal mutatott változó értékét mérsékeli.

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

Paraméterek

p
[in] Mutasson a dekrementálandó változóra.

Visszaadott érték

Ha a decrement eredménye 0, akkor Decrement 0 értéket ad vissza. Ha a dekrement eredménye nemzero, akkor a visszatérési érték is nonzero, de nem lehet egyenlő a decrement eredményével.

Megjegyzések

InterlockedDecrement megakadályozza, hogy több szál egyidejűleg használja ezt a változót.

CComMultiThreadModel::Növekmény

Ez a statikus függvény meghívja a Win32 függvényt InterlockedIncrement, amely növeli a páltal mutatott változó értékét.

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

Paraméterek

p
[in] Mutasson a növelendő változóra.

Visszaadott érték

Ha a növekmény eredménye 0, akkor Increment 0 értéket ad vissza. Ha a növekmény eredménye nemzero, akkor a visszatérési érték is nonzero, de lehet, hogy nem egyenlő a növekmény eredményével.

Megjegyzések

InterlockedIncrement megakadályozza, hogy több szál egyidejűleg használja ezt a változót.

CComMultiThreadModel::ThreadModelNoCS

CComMultiThreadModelhasználatakor a typedef név ThreadModelNoCS a CComMultiThreadModelNoCS osztályra hivatkozik.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Megjegyzések

CComMultiThreadModelNoCS szálbiztos metódusokat biztosít a változók növeléséhez és csökkenéséhez; azonban nem biztosít kritikus szakaszt.

CComSingleThreadModel és CComMultiThreadModelNoCS a ThreadModelNoCSdefinícióit is tartalmazzák. Az alábbi táblázat a szálmodell-osztály és a ThreadModelNoCSáltal hivatkozott osztály közötti kapcsolatot mutatja be:

A következőben definiált osztály: Hivatkozott osztály
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel
CComMultiThreadModelNoCS CComMultiThreadModelNoCS

Példa

Lásd CComMultiThreadModel::AutoCriticalSection.

Lásd még:

CComSingleThreadModel osztály
CComAutoCriticalSection osztály
CComCriticalSection osztály
osztály áttekintése