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.
CComMultiThreadModel Zapewnia bezpieczne wątkowo metody inkrementacji i dekrementacji wartości zmiennej.
Składnia
class CComMultiThreadModel
Elementy członkowskie
Definicje typów publicznych
| Nazwa/nazwisko | opis |
|---|---|
| CComMultiThreadModel::AutoCriticalSection | Odwołuje się do klasy CComAutoCriticalSection. |
| CComMultiThreadModel::CriticalSection | Odwołuje się do klasy CComCriticalSection. |
| CComMultiThreadModel::ThreadModelNoCS | Odwołuje się do klasy CComMultiThreadModelNoCS. |
Metody publiczne
| Nazwa/nazwisko | opis |
|---|---|
| CComMultiThreadModel::D ecrement | (Statyczne) Dekrementuje wartość określonej zmiennej w bezpieczny wątkowo sposób. |
| CComMultiThreadModel::Increment | (Statyczne) Zwiększa wartość określonej zmiennej w bezpieczny wątkowo sposób. |
Uwagi
Zazwyczaj używasz CComMultiThreadModel za pomocą jednej z dwóch nazw typedef, CComObjectThreadModel lub CComGlobalsThreadModel. Klasa, do którego odwołuje się każda typedef z nich, zależy od używanego modelu wątkowego, jak pokazano w poniższej tabeli:
| — klasa typedef | Pojedyncze wątkowanie | Wątkowanie apartamentów | Wolne wątkowanie |
|---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel; M= CComMultiThreadModel
CComMultiThreadModel sam definiuje trzy typedef nazwy.
AutoCriticalSection i CriticalSection klasy referencyjne, które zapewniają metody uzyskiwania i zwalniania własności sekcji krytycznej.
ThreadModelNoCS references, klasa [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Wymagania
Nagłówek: atlbase.h
CComMultiThreadModel::AutoCriticalSection
W przypadku używania metody CComMultiThreadModeltypedef nazwa AutoCriticalSection odwołuje się do klasy CComAutoCriticalSection, która udostępnia metody uzyskiwania i zwalniania własności obiektu sekcji krytycznej.
typedef CComAutoCriticalSection AutoCriticalSection;
Uwagi
CComSingleThreadModel i CComMultiThreadModelNoCS 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 |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
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
Poniższy kod jest modelowany po CComObjectRootEx i demonstruje AutoCriticalSection użycie w środowisku wątkowym.
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;
W poniższych tabelach przedstawiono wyniki InternalAddRef metod i Lock w zależności od ThreadModel parametru szablonu i modelu wątkowania używanego przez aplikację:
ThreadModel = CComObjectThreadModel
| Method | Wątek pojedynczy lub apartamentowy | Wolne wątkowanie |
|---|---|---|
InternalAddRef |
Przyrost nie jest bezpieczny wątkowo. | Przyrost jest bezpieczny wątkowo. |
Lock |
Nic nie robi; nie ma sekcji krytycznej do zablokowania. | Sekcja krytyczna jest zablokowana. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
| Method | Wątek pojedynczy lub apartamentowy | Wolne wątkowanie |
|---|---|---|
InternalAddRef |
Przyrost nie jest bezpieczny wątkowo. | Przyrost jest bezpieczny wątkowo. |
Lock |
Nic nie robi; nie ma sekcji krytycznej do zablokowania. | Nic nie robi; nie ma sekcji krytycznej do zablokowania. |
CComMultiThreadModel::CriticalSection
W przypadku używania CComMultiThreadModelmetody typedef nazwa CriticalSection odwołuje się do klasy CComCriticalSection, która udostępnia metody uzyskiwania i zwalniania własności obiektu sekcji krytycznej.
typedef CComCriticalSection CriticalSection;
Uwagi
CComSingleThreadModel i CComMultiThreadModelNoCS 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 |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Oprócz CriticalSectionfunkcji 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.
CComMultiThreadModel::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 zapobiega jednoczesnemu używaniu tej zmiennej więcej niż jeden wątek.
CComMultiThreadModel::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, Increment 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 zapobiega jednoczesnemu używaniu tej zmiennej więcej niż jeden wątek.
CComMultiThreadModel::ThreadModelNoCS
W przypadku używania metody CComMultiThreadModeltypedef nazwa ThreadModelNoCS odwołuje się do klasy CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Uwagi
CComMultiThreadModelNoCS Zapewnia bezpieczne wątkowo metody inkrementacji i dekrementacji zmiennej; nie zawiera jednak sekcji krytycznej.
CComSingleThreadModel oraz CComMultiThreadModelNoCS zawiera 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 |
|---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Przykład
Zobacz CComMultiThreadModel::AutoCriticalSection.
Zobacz też
Klasa CComSingleThreadModel
Klasa CComAutoCriticalSection
Klasa CComCriticalSection
Omówienie klasy