Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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