CComMultiThreadModel-klass
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 CComMultiThreadModel
refererar 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 AutoCriticalSection
kan 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 CComMultiThreadModel
refererar 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 CriticalSection
kan 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 CComMultiThreadModel
refererar namnet typedef
ThreadModelNoCS
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