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