Partager via


CComMultiThreadModel::AutoCriticalSection

Lorsque vous utilisez CComMultiThreadModel, le nom AutoCriticalSection d' typedef référence la 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 thread et la classe de section critique référencées 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 nom CriticalSectiond' typedef . Vous ne devez pas spécifier AutoCriticalSection dans les objets globaux ou des membres de classe statique si vous souhaitez éliminer le code de démarrage CRT.

Exemple

Le code suivant est modélisée après CComObjectRootEx, et explique AutoCriticalSection utilisé dans un environnement de threads.

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 permettent de visualiser les résultats des méthodes d' InternalAddRef et d' Lock , selon le paramètre de modèle de ThreadModel et le modèle de thread utilisés par l'application :

ThreadModel = CComObjectThreadModel

Méthode

Choisissez ou thread cloisonné (STA)

Modèle de thread libre

InternalAddRef

L'index n'est pas thread-safe.

L'index est thread-safe.

Lock

Sans effet ; il n'existe aucune section critique à verrouiller.

La section critique est verrouillée.

ThreadModel = CComObjectThreadModel::ThreadModelNoCS

Méthode

Choisissez ou thread cloisonné (STA)

Modèle de thread libre

InternalAddRef

L'index n'est pas thread-safe.

L'index est thread-safe.

Lock

Sans effet ; il n'existe aucune section critique à verrouiller.

Sans effet ; il n'existe aucune section critique à verrouiller.

Configuration requise

Header: atlbase.h

Voir aussi

Référence

CComMultiThreadModel, classe

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS