Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.