CComMultiThreadModel::AutoCriticalSection
A o usar CComMultiThreadModel, referências de AutoCriticalSection de nome de typedefCComAutoCriticalSectionclasse, que fornece métodos para obter e definir a propriedade de um objeto de seção crítica.
typedef CComAutoCriticalSection AutoCriticalSection;
Comentários
CComSingleThreadModel e CComMultiThreadModelNoCS também contém definições para AutoCriticalSection.A tabela a seguir mostra a relação entre a classe de modelo de threads e a classe de seção crítica referenciadas por AutoCriticalSection:
Classe definida dentro |
Classe referenciada |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Além de AutoCriticalSection, você pode usar o nome CriticalSectionde typedef .Você não deve especificar AutoCriticalSection em objetos globais ou em membros estáticos da classe se você deseja eliminar o código de inicialização do CRT.
Exemplo
O código a seguir é modelado após a CComObjectRootEx, e demonstra AutoCriticalSection que está sendo usado em um ambiente 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;
};
As tabelas a seguir mostra os resultados dos métodos de InternalAddRef e de Lock , como o parâmetro do modelo de ThreadModel e o modelo de threads usados pelo aplicativo:
ThreadModel = CComObjectThreadModel
Método |
Escolha ou thread Apartment |
Livre segmentação |
---|---|---|
InternalAddRef |
O incremento não é thread-safe. |
O incremento é thread-safe. |
Lock |
Não fará nada; não há nenhuma seção crítica para bloquear. |
A seção crítica é bloqueada. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
Método |
Escolha ou thread Apartment |
Livre segmentação |
---|---|---|
InternalAddRef |
O incremento não é thread-safe. |
O incremento é thread-safe. |
Lock |
Não fará nada; não há nenhuma seção crítica para bloquear. |
Não fará nada; não há nenhuma seção crítica para bloquear. |
Requisitos
Cabeçalho: atlbase.h