Compartir a través de


CComMultiThreadModel::AutoCriticalSection

Al utilizar CComMultiThreadModel, el nombre AutoCriticalSection de typedef hace referencia a la clase CComAutoCriticalSection, que proporciona métodos para obtener y liberar la propiedad de un objeto de sección crítica.

typedef CComAutoCriticalSection AutoCriticalSection;

Comentarios

CComSingleThreadModel y CComMultiThreadModelNoCS contienen las definiciones de AutoCriticalSection. La tabla siguiente muestra la relación entre la clase del modelo de subprocesos y la clase de sección crítica hace referencia en AutoCriticalSection:

Clase definido en

Clase hace referencia

CComMultiThreadModel

CComCriticalSection

CComSingleThreadModel

CComFakeCriticalSection

CComMultiThreadModelNoCS

CComFakeCriticalSection

Además de AutoCriticalSection, puede utilizar el nombre CriticalSectionde typedef . No debe especificar AutoCriticalSection en objetos globales o miembros de clases estáticas si desea eliminar el código de inicio CRT.

Ejemplo

El código siguiente está basada en CComObjectRootEx, y muestra AutoCriticalSection utilizado en un entorno de subprocesamiento.

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;
};

Las tablas siguientes se muestran los resultados de los métodos de InternalAddRef y de Lock , dependiendo del parámetro de plantilla de ThreadModel y el modelo de subprocesos utilizados por la aplicación:

ThreadModel = CComObjectThreadModel

Método

Single o subproceso controlado

subprocesamiento libre

InternalAddRef

El incremento no es seguro para subprocesos.

El incremento es seguro para subprocesos.

Lock

no hace nada; no hay sección crítica a bloquear.

la sección crítica está bloqueada.

ThreadModel = CComObjectThreadModel:: ThreadModelNoCS

Método

Single o subproceso controlado

subprocesamiento libre

InternalAddRef

El incremento no es seguro para subprocesos.

El incremento es seguro para subprocesos.

Lock

no hace nada; no hay sección crítica a bloquear.

no hace nada; no hay sección crítica a bloquear.

Requisitos

encabezado: atlbase.h

Vea también

Referencia

CComMultiThreadModel Class

CComObjectThreadModel

CComGlobalsThreadModel

CComMultiThreadModel::ThreadModelNoCS