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
, CComMultiThreadModel
e CComSingleThreadModel.
Nota
I nomi globali typedef
CComObjectThreadModel e CComGlobalsThreadModel non fanno riferimento CComMultiThreadModelNoCS
a .
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 AutoCriticalSection
riferimento :
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 CriticalSection
riferimento :
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 ThreadModelNoCS
riferimento :
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.