Condividi tramite


Classe CComMultiThreadModelNoCS

CComMultiThreadModelNoCS fornisce metodi thread-safe per incrementare e decrementare il valore di una variabile, senza blocco di sezioni critiche o funzionalità di sblocco.

Sintassi

class CComMultiThreadModelNoCS

Membri

Typedef pubblici

Nome Descrizione
CComMultiThreadModelNoCS::AutoCriticalSection Classe References CComFakeCriticalSection.
CComMultiThreadModelNoCS::CriticalSection Classe References CComFakeCriticalSection.
CComMultiThreadModelNoCS::ThreadModelNoCS Classe References CComMultiThreadModelNoCS.

Metodi pubblici

Nome Descrizione
CComMultiThreadModelNoCS::D ecrement (Statico) Decrementa il valore della variabile specificata in modo thread-safe.
CComMultiThreadModelNoCS::Increment (Statico) Incrementa il valore della variabile specificata in modo thread-safe.

Osservazioni:

CComMultiThreadModelNoCS è simile a CComMultiThreadModel in quanto fornisce metodi thread-safe per l'incremento e la decrementazione di una variabile. Tuttavia, quando si fa riferimento a una classe di sezione critica tramite CComMultiThreadModelNoCS, metodi come Lock e Unlock non eseguiranno alcuna operazione.

In genere, si usa CComMultiThreadModelNoCS tramite il ThreadModelNoCS typedef nome . Viene typedef definito in CComMultiThreadModelNoCS, CComMultiThreadModele CComSingleThreadModel.

Nota

I nomi globali typedef CComObjectThreadModel e CComGlobalsThreadModel non fanno riferimento CComMultiThreadModelNoCSa .

Oltre a ThreadModelNoCS, CComMultiThreadModelNoCS definisce AutoCriticalSection e CriticalSection. Questi ultimi due typedef nomi fanno riferimento a CComFakeCriticalSection, che fornisce metodi vuoti associati a ottenere e rilasciare una sezione critica.

Requisiti

Intestazione: atlbase.h

CComMultiThreadModelNoCS::AutoCriticalSection

Quando si usa CComMultiThreadModelNoCS, il typedef nome AutoCriticalSection fa riferimento alla classe CComFakeCriticalSection.

typedef CComFakeCriticalSection AutoCriticalSection;

Osservazioni:

Poiché CComFakeCriticalSection non fornisce una sezione critica, i relativi metodi non eseguono alcuna operazione.

CComMultiThreadModel e CComSingleThreadModel contengono anche definizioni per AutoCriticalSection. La tabella seguente illustra la relazione tra la classe del modello di threading e la classe di sezione critica a cui fa AutoCriticalSectionriferimento :

Classe definita in Classe a cui si fa riferimento
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComAutoCriticalSection
CComSingleThreadModel CComFakeCriticalSection

Oltre a AutoCriticalSection, è possibile usare il typedef nome CriticalSection. Se si desidera eliminare il codice di avvio CRT, non è consigliabile specificare AutoCriticalSection in oggetti globali o membri di classi statiche.

Esempio

Vedere CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::CriticalSection

Quando si usa CComMultiThreadModelNoCS, il typedef nome CriticalSection fa riferimento alla classe CComFakeCriticalSection.

typedef CComFakeCriticalSection CriticalSection;

Osservazioni:

Poiché CComFakeCriticalSection non fornisce una sezione critica, i relativi metodi non eseguono alcuna operazione.

CComMultiThreadModel e CComSingleThreadModel contengono anche definizioni per CriticalSection. La tabella seguente illustra la relazione tra la classe del modello di threading e la classe di sezione critica a cui fa CriticalSectionriferimento :

Classe definita in Classe a cui si fa riferimento
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection

Oltre a CriticalSection, è possibile usare il typedef nome AutoCriticalSection. Se si desidera eliminare il codice di avvio CRT, non è consigliabile specificare AutoCriticalSection in oggetti globali o membri di classi statiche.

Esempio

Vedere CComMultiThreadModel::AutoCriticalSection.

CComMultiThreadModelNoCS::D ecrement

Questa funzione statica chiama la funzione Win32 InterlockedDecrement, che decrementa il valore della variabile a cui punta p.

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

Parametri

p
[in] Puntatore alla variabile da decrementare.

Valore restituito

Se il risultato del decremento è 0, Decrement restituisce 0. Se il risultato del decremento è diverso da zero, anche il valore restituito è diverso da zero, ma potrebbe non essere uguale al risultato del decremento.

Osservazioni:

InterlockedDecrement impedisce a più thread di usare contemporaneamente questa variabile.

CComMultiThreadModelNoCS::Increment

Questa funzione statica chiama la funzione Win32 InterlockedIncrement, che incrementa il valore della variabile a cui punta p.

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

Parametri

p
[in] Puntatore alla variabile da incrementare.

Valore restituito

Se il risultato dell'incremento è 0, Increment restituisce 0. Se il risultato dell'incremento è diverso da zero, anche il valore restituito è diverso da zero, ma potrebbe non essere uguale al risultato dell'incremento.

Osservazioni:

InterlockedIncrement impedisce a più thread di usare contemporaneamente questa variabile.

CComMultiThreadModelNoCS::ThreadModelNoCS

Quando si usa CComMultiThreadModelNoCS, il typedef nome ThreadModelNoCS fa semplicemente riferimento a CComMultiThreadModelNoCS.

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

Osservazioni:

CComMultiThreadModel e CComSingleThreadModel contengono anche definizioni per ThreadModelNoCS. La tabella seguente illustra la relazione tra la classe del modello di threading e la classe a cui fa ThreadModelNoCSriferimento :

Classe definita in Classe a cui si fa riferimento
CComMultiThreadModelNoCS CComMultiThreadModelNoCS
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel

Si noti che la definizione di ThreadModelNoCS in CComMultiThreadModelNoCS fornisce la simmetria con CComMultiThreadModel e CComSingleThreadModel. Si supponga, ad esempio, che il codice di esempio in CComMultiThreadModel::AutoCriticalSection abbia dichiarato quanto segue typedef:

typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;

Indipendentemente dalla classe specificata per ThreadModel (ad esempio CComMultiThreadModelNoCS), _ThreadModel viene risolta di conseguenza.

Esempio

Vedere CComMultiThreadModel::AutoCriticalSection.

Vedi anche

Cenni preliminari sulla classe