Compartilhar via


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

Consulte também

Referência

Classe de CComMultiThreadModel

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS