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ą CComMultiThreadModelNoCS
metod , 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
, CComMultiThreadModel
i 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 CComMultiThreadModelNoCS
metody 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 AutoCriticalSection
funkcji 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 CComMultiThreadModelNoCS
metody 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 CriticalSection
nazwy 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 CComMultiThreadModelNoCS
nazwy 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 typedef
elementu:
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.