Udostępnij za pośrednictwem


Klasa CComMultiThreadModelNoCS

CComMultiThreadModelNoCS Zapewnia bezpieczne wątkowo metody zwiększania i dekrementacji wartości zmiennej bez krytycznego blokowania lub odblokowywania funkcji.

Składnia

class CComMultiThreadModelNoCS

Elementy członkowskie

Definicje typów publicznych

Nazwa/nazwisko opis
CComMultiThreadModelNoCS::AutoCriticalSection Odwołania do klasy CComFakeCriticalSection.
CComMultiThreadModelNoCS::CriticalSection Odwołania do klasy CComFakeCriticalSection.
CComMultiThreadModelNoCS::ThreadModelNoCS Odwołania do klasy CComMultiThreadModelNoCS.

Metody publiczne

Nazwa/nazwisko opis
CComMultiThreadModelNoCS::D ecrement (Statyczne) Dekrementuje wartość określonej zmiennej w bezpieczny wątkowo sposób.
CComMultiThreadModelNoCS::Increment (Statyczne) Zwiększa wartość określonej zmiennej w bezpieczny wątkowo sposób.

Uwagi

CComMultiThreadModelNoCS jest podobny do modelu CComMultiThreadModel , który zapewnia bezpieczne wątkowo metody inkrementacji i dekrementacji zmiennej. Jednak jeśli odwołujesz się do klasy sekcji krytycznej za pomocą CComMultiThreadModelNoCSmetod , takich jak Lock i Unlock nie zrobisz nic.

Zazwyczaj używa CComMultiThreadModelNoCS się jej za pomocą ThreadModelNoCS typedef nazwy . Jest to typedef zdefiniowane w elementach CComMultiThreadModelNoCS, CComMultiThreadModeli CComSingleThreadModel.

Uwaga

Nazwy globalne typedef CComObjectThreadModel i CComGlobalsThreadModel nie odwołują się do elementu CComMultiThreadModelNoCS.

Oprócz ThreadModelNoCS, CComMultiThreadModelNoCS definiuje AutoCriticalSection i CriticalSection. Te dwie typedef ostatnie nazwy odwołują się do CComFakeCriticalSection, która udostępnia puste metody skojarzone z uzyskiwaniem i wydawaniem sekcji krytycznej.

Wymagania

Nagłówek: atlbase.h

CComMultiThreadModelNoCS::AutoCriticalSection

W przypadku używania CComMultiThreadModelNoCSmetody typedef nazwa AutoCriticalSection odwołuje się do klasy CComFakeCriticalSection.

typedef CComFakeCriticalSection AutoCriticalSection;

Uwagi

Ponieważ CComFakeCriticalSection nie udostępnia sekcji krytycznej, jej metody nic nie robią.

CComMultiThreadModel i CComSingleThreadModel zawierają również definicje dla elementu AutoCriticalSection. W poniższej tabeli przedstawiono relację między klasą modelu wątkowania a klasą sekcji krytycznej przywołyną przez :AutoCriticalSection

Klasa zdefiniowana w Odwołano się do klasy
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComAutoCriticalSection
CComSingleThreadModel CComFakeCriticalSection

Oprócz AutoCriticalSectionfunkcji można użyć typedef nazwy CriticalSection. Nie należy określać AutoCriticalSection w obiektach globalnych lub statycznych składowych klas, jeśli chcesz wyeliminować kod uruchamiania CRT.

Przykład

Zobacz CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::CriticalSection

W przypadku używania CComMultiThreadModelNoCSmetody typedef nazwa CriticalSection odwołuje się do klasy CComFakeCriticalSection.

typedef CComFakeCriticalSection CriticalSection;

Uwagi

Ponieważ CComFakeCriticalSection nie udostępnia sekcji krytycznej, jej metody nic nie robią.

CComMultiThreadModel i CComSingleThreadModel zawierają również definicje dla elementu CriticalSection. W poniższej tabeli przedstawiono relację między klasą modelu wątkowania a klasą sekcji krytycznej przywołyną przez :CriticalSection

Klasa zdefiniowana w Odwołano się do klasy
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection

Oprócz CriticalSectionnazwy można użyć typedef nazwy AutoCriticalSection. Nie należy określać AutoCriticalSection w obiektach globalnych lub statycznych składowych klas, jeśli chcesz wyeliminować kod uruchamiania CRT.

Przykład

Zobacz CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::D ecrement

Ta funkcja statyczna wywołuje funkcję Win32 InterlockedDecrement, która dekrementuje wartość zmiennej wskazywanej przez p.

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

Parametry

p
[in] Wskaźnik do zmiennej, która ma zostać zdekrementowana.

Wartość zwracana

Jeśli wynik dekrementacji wynosi 0, Decrement zwraca wartość 0. Jeśli wynik dekrementu jest niezerowy, zwracana wartość jest również niezerowa, ale może nie być równa wyniku dekrementacji.

Uwagi

InterlockedDecrement uniemożliwia jednoczesne używanie tej zmiennej więcej niż jednego wątku.

CComMultiThreadModelNoCS::Increment

Ta funkcja statyczna wywołuje funkcję Win32 InterlockedIncrement, co zwiększa wartość zmiennej wskazywanej przez p.

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

Parametry

p
[in] Wskaźnik do zmiennej, która ma być zwiększana.

Wartość zwracana

Jeśli wynik przyrostu wynosi 0, przyrost zwraca wartość 0. Jeśli wynik przyrostu jest niezerowy, zwracana wartość jest również niezerowa, ale może nie być równa wynikowi przyrostu.

Uwagi

InterlockedIncrement uniemożliwia jednoczesne używanie tej zmiennej więcej niż jednego wątku.

CComMultiThreadModelNoCS::ThreadModelNoCS

W przypadku używania CComMultiThreadModelNoCSnazwy ThreadModelNoCS typedef nazwa po prostu odwołuje się do CComMultiThreadModelNoCS.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Uwagi

CComMultiThreadModel i CComSingleThreadModel zawierają również definicje dla elementu ThreadModelNoCS. W poniższej tabeli przedstawiono relację między klasą modelu wątkowania a klasą przywołyną przez ThreadModelNoCS:

Klasa zdefiniowana w Odwołano się do klasy
CComMultiThreadModelNoCS CComMultiThreadModelNoCS
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel

Należy pamiętać, że definicja elementu ThreadModelNoCS in CComMultiThreadModelNoCS zawiera symetrię z elementami CComMultiThreadModel i CComSingleThreadModel. Załóżmy na przykład, że przykładowy kod w CComMultiThreadModel::AutoCriticalSection zadeklarowaniu następującego typedefelementu:

typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;

Niezależnie od klasy określonej dla ThreadModel (takiej jak CComMultiThreadModelNoCS), _ThreadModel jest odpowiednio rozpoznawana.

Przykład

Zobacz CComMultiThreadModel::AutoCriticalSection.

Zobacz też

Omówienie klasy