Clase CComMultiThreadModel
CComMultiThreadModel
proporciona métodos seguros para subprocesos para aumentar y disminuir el valor de una variable.
Sintaxis
class CComMultiThreadModel
Miembros
Definiciones de tipos públicas
Nombre | Descripción |
---|---|
CComMultiThreadModel::AutoCriticalSection | Hace referencia a la clase CComAutoCriticalSection. |
CComMultiThreadModel::CriticalSection | Hace referencia a la clase CComCriticalSection. |
CComMultiThreadModel::ThreadModelNoCS | Hace referencia a la clase CComMultiThreadModelNoCS. |
Métodos públicos
Nombre | Descripción |
---|---|
CComMultiThreadModel::Decrement | (Estático) Disminuye el valor de la variable especificada de forma segura para los subprocesos. |
CComMultiThreadModel::Increment | (Estático) Aumenta el valor de la variable especificada de forma segura para los subprocesos. |
Comentarios
Normalmente, se usa CComMultiThreadModel
mediante uno de dos nombres typedef
, ya sea [CComObjectThreadModel](atl-typedefs.md#ccomobjectthreadmodel o [CComGlobalsThreadModel](atl-typedefs.md#ccomglobalsthreadmodel. La clase a la que hace referencia cada typedef
depende del modelo de subprocesos usado, como se muestra en la tabla siguiente:
typedef | Subproceso único | Apartamento de subproceso | Subprocesamiento libre |
---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel
; M= CComMultiThreadModel
CComMultiThreadModel
como tal define tres nombres de typedef
. Clases de referencia AutoCriticalSection
y CriticalSection
que proporcionan métodos para obtener y liberar la propiedad de una sección crítica. ThreadModelNoCS
hace referencia a la clase [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Requisitos
Encabezado: atlbase.h
CComMultiThreadModel::AutoCriticalSection
Cuando se usa 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ítico.
typedef CComAutoCriticalSection AutoCriticalSection;
Comentarios
CComSingleThreadModel y CComMultiThreadModelNoCS también contienen definiciones para AutoCriticalSection
. En la tabla siguiente se muestra la relación entre la clase de modelo de subprocesos y la clase de sección crítica a la que hace referencia AutoCriticalSection
:
Clase definida en | Clase a la que se hace referencia |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Además de AutoCriticalSection
, puede usar el nombre de typedef
CriticalSection. No debe especificar AutoCriticalSection
en objetos globales o miembros de clase estática si desea eliminar el código de inicio de CRT.
Ejemplo
El código siguiente se modela después de CComObjectRootEx y muestra cómo se usa AutoCriticalSection
en un entorno de subprocesos.
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;
En las tablas siguientes se muestran los resultados de los métodos InternalAddRef
y Lock
, en función del parámetro ThreadModel
de plantilla y del modelo de subprocesos usado por la aplicación:
ThreadModel = CComObjectThreadModel
Método | Subprocesamiento individual o de apartamento | Subprocesamiento libre |
---|---|---|
InternalAddRef |
El aumento no es seguro para subprocesos. | El aumento es seguro para subprocesos. |
Lock |
No hace nada; no hay que bloquear ninguna sección crítica. | La sección crítica está bloqueada. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
Método | Subprocesamiento individual o de apartamento | Subprocesamiento libre |
---|---|---|
InternalAddRef |
El aumento no es seguro para subprocesos. | El aumento es seguro para subprocesos. |
Lock |
No hace nada; no hay que bloquear ninguna sección crítica. | No hace nada; no hay que bloquear ninguna sección crítica. |
CComMultiThreadModel::CriticalSection
Cuando se usa CComMultiThreadModel
, el nombre CriticalSection
de typedef
hace referencia a la clase CComCriticalSection, que proporciona métodos para obtener y liberar la propiedad de un objeto de sección crítico.
typedef CComCriticalSection CriticalSection;
Comentarios
CComSingleThreadModel y CComMultiThreadModelNoCS también contienen definiciones para CriticalSection
. En la tabla siguiente se muestra la relación entre la clase de modelo de subprocesos y la clase de sección crítica a la que hace referencia CriticalSection
:
Clase definida en | Clase a la que se hace referencia |
---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Además de CriticalSection
, puede usar el nombre de typedef
AutoCriticalSection. No debe especificar AutoCriticalSection
en objetos globales o miembros de clase estática si desea eliminar el código de inicio de CRT.
Ejemplo
Consulte CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModel::Decrement
Esta función estática llama a la función InterlockedDecrement de Win32, que disminuye el valor de la variable a la que apunta p.
static ULONG WINAPI Decrement(LPLONG p) throw ();
Parámetros
p
[in] Puntero a la variable que se va a disminuir.
Valor devuelto
Si el resultado de la disminución es 0, Decrement
devuelve 0. Si el resultado de la disminución es distinto de cero, el valor devuelto también es distinto de cero, pero puede no ser igual al resultado de la disminución.
Comentarios
InterlockedDecrement
impide que más de un subproceso use esta variable de forma simultánea.
CComMultiThreadModel::Increment
Esta función estática llama a la función InterlockedIncrement de Win32, que aumenta el valor de la variable a la que apunta p.
static ULONG WINAPI Increment(LPLONG p) throw ();
Parámetros
p
[in] Puntero a la variable que se va a aumentar.
Valor devuelto
Si el resultado del aumento es 0, Increment
devuelve 0. Si el resultado del incremento es distinto de cero, el valor devuelto también es distinto de cero, pero puede no ser igual al resultado del incremento.
Comentarios
InterlockedIncrement
impide que más de un subproceso use esta variable de forma simultánea.
CComMultiThreadModel::ThreadModelNoCS
Cuando se usa CComMultiThreadModel
, el nombre ThreadModelNoCS
de typedef
hace referencia a la clase CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Comentarios
CComMultiThreadModelNoCS
proporciona métodos seguros para subprocesos para aumentar y disminuir una variable; pero no proporciona una sección crítica.
CComSingleThreadModel y CComMultiThreadModelNoCS
también contienen definiciones para ThreadModelNoCS
. En la tabla siguiente se muestra la relación entre la clase de modelo de subprocesos y la clase a la que hace referencia ThreadModelNoCS
:
Clase definida en | Clase a la que se hace referencia |
---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Ejemplo
Consulte CComMultiThreadModel::AutoCriticalSection.
Consulte también
CComSingleThreadModel (clase)
CComAutoCriticalSection (clase)
CComCriticalSection (clase)
Información general sobre la clase