Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
CComMultiThreadModel innehåller trådsäkra metoder för att öka och minska värdet för en variabel.
Syntax
class CComMultiThreadModel
Medlemmar
Offentliga typedefs
| Namn | Beskrivning |
|---|---|
| CComMultiThreadModel::AutoCriticalSection | Refererar till klassen CComAutoCriticalSection. |
| CComMultiThreadModel::CriticalSection | Refererar till klassen CComCriticalSection. |
| CComMultiThreadModel::ThreadModelNoCS | Refererar till klassen CComMultiThreadModelNoCS. |
Offentliga metoder
| Namn | Beskrivning |
|---|---|
| CComMultiThreadModel::D ecrement | (Statisk) Minskar värdet för den angivna variabeln på ett trådsäkert sätt. |
| CComMultiThreadModel::Öka | (Statisk) Ökar värdet för den angivna variabeln på ett trådsäkert sätt. |
Anmärkningar
Vanligtvis använder du CComMultiThreadModel via ett av två typedef namn, antingen CComObjectThreadModel eller CComGlobalsThreadModel. Vilken klass som refereras av varje typedef beror på vilken trådmodell som används, enligt följande tabell:
| typedef | Enkel trådning | Lägenhetstrådning | Fri trådning |
|---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel; M= CComMultiThreadModel
CComMultiThreadModel definierar tre typedef namn.
AutoCriticalSection och CriticalSection referensklasser som tillhandahåller metoder för att hämta och frigöra ägarskap för ett kritiskt avsnitt.
ThreadModelNoCS refererar till klassen [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Krav
rubrik: atlbase.h
CComMultiThreadModel::AutoCriticalSection
När du använder CComMultiThreadModelrefererar typedef-namnet AutoCriticalSection till klassen CComAutoCriticalSection, som innehåller metoder för att hämta och frigöra ägarskap för ett kritiskt avsnittsobjekt.
typedef CComAutoCriticalSection AutoCriticalSection;
Anmärkningar
CComSingleThreadModel och CComMultiThreadModelNoCS innehåller även definitioner för AutoCriticalSection. I följande tabell visas relationen mellan trådmodellklassen och den kritiska avsnittsklass som refereras av AutoCriticalSection:
| Klass som definierats i | Klassreferens |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Förutom AutoCriticalSectionkan du använda typedef-namnet CriticalSection. Du bör inte ange AutoCriticalSection i globala objekt eller statiska klassmedlemmar om du vill eliminera CRT-startkoden.
Exempel
Följande kod modelleras efter CComObjectRootExoch visar AutoCriticalSection som används i en trådmiljö.
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;
Följande tabeller visar resultatet av metoderna InternalAddRef och Lock, beroende på ThreadModel mallparametern och trådmodellen som används av programmet:
ThreadModel = CComObjectThreadModel
| Metod | Enkel- eller lägenhetstrådning | Fri trådning |
|---|---|---|
InternalAddRef |
Inkrementet är inte trådsäkert. | Inkrementet är trådsäkert. |
Lock |
Gör ingenting; det finns inget kritiskt avsnitt att låsa. | Det kritiska avsnittet är låst. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
| Metod | Enkel- eller lägenhetstrådning | Fri trådning |
|---|---|---|
InternalAddRef |
Inkrementet är inte trådsäkert. | Inkrementet är trådsäkert. |
Lock |
Gör ingenting; det finns inget kritiskt avsnitt att låsa. | Gör ingenting; det finns inget kritiskt avsnitt att låsa. |
CComMultiThreadModel::CriticalSection
När du använder CComMultiThreadModelrefererar typedef namn CriticalSection till klassen CComCriticalSection, som innehåller metoder för att hämta och frigöra ägarskap för ett kritiskt avsnittsobjekt.
typedef CComCriticalSection CriticalSection;
Anmärkningar
CComSingleThreadModel och CComMultiThreadModelNoCS innehåller även definitioner för CriticalSection. I följande tabell visas relationen mellan trådmodellklassen och den kritiska avsnittsklass som refereras av CriticalSection:
| Klass som definierats i | Klassreferens |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Förutom CriticalSectionkan du använda typedef-namnet AutoCriticalSection. Du bör inte ange AutoCriticalSection i globala objekt eller statiska klassmedlemmar om du vill eliminera CRT-startkoden.
Exempel
Se CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModel::D ecrement
Den här statiska funktionen anropar funktionen Win32 InterlockedDecrement, som minskar värdet för variabeln som pekas på av p.
static ULONG WINAPI Decrement(LPLONG p) throw ();
Parametrar
p
[i] Pekare till variabeln som ska minskas.
Returvärde
Om resultatet av minskning är 0 returnerar Decrement 0. Om resultatet av avfallet inte är noll är returvärdet också icke-noll, men får inte vara lika med resultatet av minskningarna.
Anmärkningar
InterlockedDecrement förhindrar att fler än en tråd använder den här variabeln samtidigt.
CComMultiThreadModel::Increment
Den här statiska funktionen anropar funktionen Win32 InterlockedIncrement, som ökar värdet för variabeln som pekas på av p.
static ULONG WINAPI Increment(LPLONG p) throw ();
Parametrar
p
[i] Pekare till variabeln som ska ökas.
Returvärde
Om resultatet av inkrementet är 0 returnerar Increment 0. Om resultatet av inkrementet inte är noll är returvärdet också icke-noll, men kanske inte lika med resultatet av inkrementet.
Anmärkningar
InterlockedIncrement förhindrar att fler än en tråd använder den här variabeln samtidigt.
CComMultiThreadModel::ThreadModelNoCS
När du använder CComMultiThreadModelrefererar namnet typedefThreadModelNoCS till klassen CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Anmärkningar
CComMultiThreadModelNoCS tillhandahåller trådsäkra metoder för att öka och minska en variabel. Det ger dock inget kritiskt avsnitt.
CComSingleThreadModel och CComMultiThreadModelNoCS innehåller även definitioner för ThreadModelNoCS. I följande tabell visas relationen mellan trådmodellklassen och den klass som refereras av ThreadModelNoCS:
| Klass som definierats i | Klassreferens |
|---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Exempel
Se CComMultiThreadModel::AutoCriticalSection.
Se även
CComSingleThreadModel Class
CComAutoCriticalSection Class
CComCriticalSection Class
översikt över -klass