Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 via l’un des deux noms typedef, CComObjectThreadModel ou 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 typedef fait référence à la AutoCriticalSection 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 typedef référence la CriticalSection 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 CriticalSectionde , 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 typedef fait référence à la ThreadModelNoCS 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