CComMultiThreadModel, classe
CComMultiThreadModel
fournit des méthodes thread-safe pour incrémenter et décrémenter la valeur d’une variable.
Syntaxe
class CComMultiThreadModel
Membres
Typedefs publics
Nom | Description |
---|---|
CComMultiThreadModel ::AutoCriticalSection | References, classe CComAutoCriticalSection. |
CComMultiThreadModel ::CriticalSection | Références, classe CComCriticalSection. |
CComMultiThreadModel ::ThreadModelNoCS | Classe References CComMultiThreadModelNoCS. |
Méthodes publiques
Nom | Description |
---|---|
CComMultiThreadModel ::D ecrement | (Statique) Décrémente la valeur de la variable spécifiée de manière thread-safe. |
CComMultiThreadModel ::Increment | (Statique) Incrémente la valeur de la variable spécifiée de manière thread-safe. |
Notes
En règle générale, vous utilisez CComMultiThreadModel
l’un des deux typedef
noms [CComObjectThreadModel](atl-typedefs.md#ccomobjectthreadmodel ou [CComGlobalsThreadModel](atl-typedefs.md#ccomglobalsthreadmodel. La classe référencée par chacun typedef
dépend du modèle de threading utilisé, comme indiqué dans le tableau suivant :
typedef | Threading unique | Threading d’appartements | Threading gratuit |
---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel
; M= CComMultiThreadModel
CComMultiThreadModel
lui-même définit trois typedef
noms. AutoCriticalSection
et CriticalSection
les classes de référence qui fournissent des méthodes pour obtenir et libérer la propriété d’une section critique. ThreadModelNoCS
references, classe [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Spécifications
En-tête : atlbase.h
CComMultiThreadModel ::AutoCriticalSection
Lors de l’utilisationCComMultiThreadModel
, le nom AutoCriticalSection
fait référence à la typedef
classe CComAutoCriticalSection, qui fournit des méthodes pour obtenir et libérer la propriété d’un objet de section critique.
typedef CComAutoCriticalSection AutoCriticalSection;
Notes
CComSingleThreadModel et CComMultiThreadModelNoCS contiennent également des définitions pour AutoCriticalSection
. Le tableau suivant montre la relation entre la classe de modèle de threading et la classe de section critique référencée par AutoCriticalSection
:
Classe définie dans | Classe référencée |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
En plus de AutoCriticalSection
, vous pouvez utiliser le typedef
nom CriticalSection. Vous ne devez pas spécifier AutoCriticalSection
dans les objets globaux ou les membres de classe statique si vous souhaitez éliminer le code de démarrage CRT.
Exemple
Le code suivant est modélisé après CComObjectRootEx et illustre AutoCriticalSection
l’utilisation dans un environnement de threading.
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;
Les tableaux suivants affichent les résultats des InternalAddRef
méthodes et Lock
des méthodes, en fonction du ThreadModel
paramètre de modèle et du modèle de thread utilisé par l’application :
ThreadModel = CComObjectThreadModel
Method | Thread d’un seul ou d’un appartement | Threading gratuit |
---|---|---|
InternalAddRef |
L’incrément n’est pas thread-safe. | L’incrément est thread-safe. |
Lock |
Ne fait rien ; il n’existe aucune section critique à verrouiller. | La section critique est verrouillée. |
ThreadModel = CComObjectThreadModel ::ThreadModelNoCS
Method | Thread d’un seul ou d’un appartement | Threading gratuit |
---|---|---|
InternalAddRef |
L’incrément n’est pas thread-safe. | L’incrément est thread-safe. |
Lock |
Ne fait rien ; il n’existe aucune section critique à verrouiller. | Ne fait rien ; il n’existe aucune section critique à verrouiller. |
CComMultiThreadModel ::CriticalSection
Lors de l’utilisationCComMultiThreadModel
, le nom CriticalSection
référence la typedef
classe CComCriticalSection, qui fournit des méthodes pour obtenir et libérer la propriété d’un objet de section critique.
typedef CComCriticalSection CriticalSection;
Notes
CComSingleThreadModel et CComMultiThreadModelNoCS contiennent également des définitions pour CriticalSection
. Le tableau suivant montre la relation entre la classe de modèle de threading et la classe de section critique référencée par CriticalSection
:
Classe définie dans | Classe référencée |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
En plus CriticalSection
de , vous pouvez utiliser le typedef
nom AutoCriticalSection. Vous ne devez pas spécifier AutoCriticalSection
dans les objets globaux ou les membres de classe statique si vous souhaitez éliminer le code de démarrage CRT.
Exemple
Voir CComMultiThreadModel ::AutoCriticalSection.
CComMultiThreadModel ::D ecrement
Cette fonction statique appelle la fonction Win32 InterlockedDecrement, qui décrémente la valeur de la variable pointée par p.
static ULONG WINAPI Decrement(LPLONG p) throw ();
Paramètres
p
[in] Pointeur vers la variable à décrémenter.
Valeur de retour
Si le résultat de la décrémentation est 0, Decrement
retourne 0. Si le résultat du décrément est différent de zéro, la valeur de retour est également différente de zéro, mais peut ne pas être égale au résultat de la décrémentation.
Notes
InterlockedDecrement
empêche plusieurs threads d’utiliser cette variable simultanément.
CComMultiThreadModel ::Increment
Cette fonction statique appelle la fonction Win32 InterlockedIncrement, qui incrémente la valeur de la variable pointée par p.
static ULONG WINAPI Increment(LPLONG p) throw ();
Paramètres
p
[in] Pointeur vers la variable à incrémenter.
Valeur de retour
Si le résultat de l’incrément est 0, Increment
retourne 0. Si le résultat de l’incrément est différent de zéro, la valeur de retour est également différente de zéro, mais peut ne pas être égale au résultat de l’incrément.
Notes
InterlockedIncrement
empêche plusieurs threads d’utiliser cette variable simultanément.
CComMultiThreadModel ::ThreadModelNoCS
Lors de l’utilisationCComMultiThreadModel
, le nom ThreadModelNoCS
fait référence à la typedef
classe CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Notes
CComMultiThreadModelNoCS
fournit des méthodes thread-safe pour incrémenter et décrémenter une variable ; toutefois, elle ne fournit pas de section critique.
CComSingleThreadModel et CComMultiThreadModelNoCS
contient également des définitions pour ThreadModelNoCS
. Le tableau suivant montre la relation entre la classe de modèle de threading et la classe référencée par ThreadModelNoCS
:
Classe définie dans | Classe référencée |
---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Exemple
Voir CComMultiThreadModel ::AutoCriticalSection.
Voir aussi
CComSingleThreadModel, classe
CComAutoCriticalSection, classe
CComCriticalSection, classe
Vue d’ensemble de la classe