Clase CComAutoThreadModule

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

Importante

Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.

Sintaxis

template <class ThreadAllocator = CComSimpleThreadAllocator>
class CComAutoThreadModule : public CComModule

Parámetros

ThreadAllocator
[in] Clase que administra la selección de subprocesos. El valor predeterminado es CComSimpleThreadAllocator.

Miembros

Métodos

Función Descripción
CreateInstance Selecciona un subproceso y, a continuación, crea un objeto en el apartamento asociado.
GetDefaultThreads (Estático) Calcula dinámicamente el número de subprocesos del módulo en función del número de procesadores.
Init Crea los subprocesos del módulo.
Bloquear Incrementa el número de bloqueos del módulo y el subproceso actual.
Unlock Disminuye el número de bloqueos del módulo y el subproceso actual.

Miembros de datos

Miembro de datos Descripción
dwThreadID Contiene el identificador del subproceso actual.
m_Allocator Administra la selección de subprocesos.
m_nThreads Contiene el número de subprocesos del módulo.
m_pApartments Administra los apartamentos del módulo.

Comentarios

Nota

Esta clase está obsoleta y ha sido reemplazada por las clases derivadas CAtlAutoThreadModule y CAtlModule. La información siguiente es para su uso con versiones anteriores de ATL.

CComAutoThreadModule se deriva de CComModule para implementar un servidor COM de subprocesos agrupados y de modelo de apartamento para los archivos EXE y los servicios de Windows. CComAutoThreadModule usa CComApartment para administrar un apartamento para cada subproceso del módulo.

Derive el módulo de CComAutoThreadModule cuando desee crear objetos en varios apartamentos. También debe incluir la macro DECLARE_CLASSFACTORY_AUTO_THREAD en la definición de clase del objeto para especificar CComClassFactoryAutoThread como generador de clases.

De manera predeterminada, ATL COM AppWizard (el Asistente para proyectos de ATL en Visual Studio .NET) derivará el módulo de CComModule. Para usar CComAutoThreadModule, modifique la definición de clase. Por ejemplo:

class CMyModule : 
public CComAutoThreadModule<CComSimpleThreadAllocator>
{
public:
   LONG Unlock()
   {
      LONG l = CComAutoThreadModule<CComSimpleThreadAllocator>::Unlock();
      if (l == 0)
         PostThreadMessage(dwThreadID, WM_QUIT, 0, 0);
      return l;
   }

   DWORD dwThreadID;
};

Jerarquía de herencia

_ATL_MODULE

CAtlModule

IAtlAutoThreadModule

CAtlModuleT

CAtlAutoThreadModuleT

CComModule

CComAutoThreadModule

Requisitos

Encabezado: atlbase.h

CComAutoThreadModule::CreateInstance

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

HRESULT CreateInstance(
    void* pfnCreateInstance,
    REFIID riid,
    void** ppvObj);

Parámetros

pfnCreateInstance
[in] Puntero a una función de creador.

riid
[in] El IID de la interfaz solicitada.

ppvObj
[out] Puntero al puntero de interfaz identificado por riid. Si el objeto no admite esta interfaz, ppvObj se establece en NULL.

Valor devuelto

Valor HRESULT estándar.

Comentarios

Selecciona un subproceso y, a continuación, crea un objeto en el apartamento asociado.

CComAutoThreadModule::dwThreadID

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

DWORD dwThreadID;

Comentarios

Contiene el identificador del subproceso actual.

CComAutoThreadModule::GetDefaultThreads

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

static int GetDefaultThreads();

Valor devuelto

Número de subprocesos que se van a crear en el módulo EXE.

Comentarios

Esta función estática calcula dinámicamente el número máximo de subprocesos para el módulo EXE, en función del número de procesadores. De manera predeterminada, este valor devuelto se pasa al método Init para crear los subprocesos.

CComAutoThreadModule::Init

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

HRESULT Init(
    _ATL_OBJMAP_ENTRY* p,
    HINSTANCE h,
    const GUID* plibid = NULL,
    int nThreads = GetDefaultThreads());

Parámetros

p
[in] Puntero a una matriz de entradas de mapa de objetos.

h
[in] Elemento HINSTANCE que se ha pasado a DLLMain o WinMain.

plibid
[in] Puntero al LIBID de la biblioteca de tipos asociada al proyecto.

nThreads
[in] Número de subprocesos que se van a crear. De manera predeterminada, nThreads es el valor devuelto por GetDefaultThreads.

Comentarios

Inicializa los miembros de datos y crea el número de subprocesos especificado por nThreads.

CComAutoThreadModule::Lock

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

LONG Lock();

Valor devuelto

Valor que puede ser útil para los diagnósticos o las pruebas.

Comentarios

Realiza un incremento atómico en el recuento de bloqueos del módulo y el subproceso actual. CComAutoThreadModule usa el recuento de bloqueos de módulo para determinar si algún cliente tiene acceso al módulo. El recuento de bloqueos del subproceso actual se usa con fines estadísticos.

CComAutoThreadModule::m_Allocator

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

ThreadAllocator  m_Allocator;

Comentarios

Objeto que administra la selección de subprocesos. De manera predeterminada, el parámetro de plantilla de la clase ThreadAllocator es CComSimpleThreadAllocator.

CComAutoThreadModule::m_nThreads

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

int m_nThreads;

Comentarios

Contiene el número de subprocesos del módulo EXE. Cuando se llama a Init, m_nThreads se establece en el valor del parámetro nThreads. Un objeto CComApartment administra el apartamento asociado de cada subproceso.

CComAutoThreadModule::m_pApartments

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

CComApartment* m_pApartments;

Comentarios

Apunta a una matriz de objetos CComApartment, cada uno de los cuales administra un apartamento del módulo. El número de elementos de la matriz se basa en el miembro m_nThreads.

CComAutoThreadModule::Unlock

A partir de ATL 7.0, CComAutoThreadModule está obsoleto: consulte Clases de módulo ATL para obtener más detalles.

LONG Unlock();

Valor devuelto

Valor que puede ser útil para los diagnósticos o las pruebas.

Comentarios

Realiza una disminución atómica en el recuento de bloqueos del módulo y el subproceso actual. CComAutoThreadModule usa el recuento de bloqueos de módulo para determinar si algún cliente tiene acceso al módulo. El recuento de bloqueos del subproceso actual se usa con fines estadísticos.

Cuando el número de bloqueos del módulo llega a cero, se puede descargar el módulo.

Consulte también

Información general sobre la clase
Clases de módulo