Clase CComMultiThreadModelNoCS
CComMultiThreadModelNoCS
proporciona métodos seguros para subprocesos para incrementar y decrementar el valor de una variable, sin una funcionalidad de bloqueo o desbloqueo de la sección crítica.
Sintaxis
class CComMultiThreadModelNoCS
Miembros
Definiciones de tipos públicas
Nombre | Descripción |
---|---|
CComMultiThreadModelNoCS::AutoCriticalSection | Hace referencia a la clase CComFakeCriticalSection. |
CComMultiThreadModelNoCS::CriticalSection | Hace referencia a la clase CComFakeCriticalSection . |
CComMultiThreadModelNoCS::ThreadModelNoCS | Hace referencia a la clase CComMultiThreadModelNoCS . |
Métodos públicos
Nombre | Descripción |
---|---|
CComMultiThreadModelNoCS::Decrement | (Estático) Disminuye el valor de la variable especificada de forma segura para los subprocesos. |
CComMultiThreadModelNoCS::Increment | (Estático) Aumenta el valor de la variable especificada de forma segura para los subprocesos. |
Comentarios
CComMultiThreadModelNoCS
es similar a CComMultiThreadModel, ya que proporciona métodos seguros para subprocesos para incrementar y decrementar una variable. Sin embargo, al hacer referencia a una clase de sección crítica a través de CComMultiThreadModelNoCS
, métodos como Lock
y Unlock
no harán nada.
Normalmente, se usa CComMultiThreadModelNoCS
a través del ThreadModelNoCS
typedef
nombre. Esta typedef
se define en CComMultiThreadModelNoCS
, CComMultiThreadModel
y CComSingleThreadModel.
Nota:
Los nombres de typedef
globales CComObjectThreadModel y CComGlobalsThreadModel no hacen referencia a CComMultiThreadModelNoCS
.
Además de ThreadModelNoCS
, CComMultiThreadModelNoCS
define AutoCriticalSection
y CriticalSection
. Estos dos últimos nombres de typedef
hacen referencia a CComFakeCriticalSection, que proporciona métodos vacíos asociados a la obtención y a la liberación de una sección crítica.
Requisitos
Encabezado: atlbase.h
CComMultiThreadModelNoCS::AutoCriticalSection
Cuando se usa CComMultiThreadModelNoCS
, el nombre de typedef
AutoCriticalSection
hace referencia a la clase CComFakeCriticalSection.
typedef CComFakeCriticalSection AutoCriticalSection;
Comentarios
Como CComFakeCriticalSection
no proporciona una sección crítica, sus métodos no hacen nada.
CComMultiThreadModel y CComSingleThreadModel 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 |
---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComAutoCriticalSection |
CComSingleThreadModel |
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
Consulte CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModelNoCS::CriticalSection
Cuando se usa CComMultiThreadModelNoCS
, el nombre de typedef
CriticalSection
hace referencia a la clase CComFakeCriticalSection.
typedef CComFakeCriticalSection CriticalSection;
Comentarios
Como CComFakeCriticalSection
no proporciona una sección crítica, sus métodos no hacen nada.
CComMultiThreadModel y CComSingleThreadModel 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 |
---|---|
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
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.
CComMultiThreadModelNoCS::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 simultáneamente esta variable.
CComMultiThreadModelNoCS::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 incremento 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 simultáneamente esta variable.
CComMultiThreadModelNoCS::ThreadModelNoCS
Al usar CComMultiThreadModelNoCS
, el nombre de typedef
ThreadModelNoCS
simplemente hace referencia a CComMultiThreadModelNoCS
.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Comentarios
CComMultiThreadModel y CComSingleThreadModel 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 |
---|---|
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
Tenga en cuenta que la definición de ThreadModelNoCS
en CComMultiThreadModelNoCS
proporciona simetría con CComMultiThreadModel
y CComSingleThreadModel
. Por ejemplo, supongamos que el código de ejemplo de CComMultiThreadModel::AutoCriticalSection
ha declarado la siguiente typedef
:
typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;
Independientemente de la clase especificada para ThreadModel
(por ejemplo, CComMultiThreadModelNoCS
), _ThreadModel
se resuelve como debe.
Ejemplo
Consulte CComMultiThreadModel::AutoCriticalSection.