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