Dela via


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