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.
template <class ThreadAllocator = CComSimpleThreadAllocator>
class CComAutoThreadModule : public CComModule
ThreadAllocator
[in] Clase que administra la selección de subprocesos. El valor predeterminado es CComSimpleThreadAllocator.
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. |
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. |
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;
};
IAtlAutoThreadModule
CComAutoThreadModule
Encabezado: atlbase.h
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);
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 HRESULT estándar.
Selecciona un subproceso y, a continuación, crea un objeto en el apartamento asociado.
A partir de ATL 7.0, CComAutoThreadModule
está obsoleto: consulte Clases de módulo ATL para obtener más detalles.
DWORD dwThreadID;
Contiene el identificador del subproceso actual.
A partir de ATL 7.0, CComAutoThreadModule
está obsoleto: consulte Clases de módulo ATL para obtener más detalles.
static int GetDefaultThreads();
Número de subprocesos que se van a crear en el módulo EXE.
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.
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());
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.
Inicializa los miembros de datos y crea el número de subprocesos especificado por nThreads.
A partir de ATL 7.0, CComAutoThreadModule
está obsoleto: consulte Clases de módulo ATL para obtener más detalles.
LONG Lock();
Valor que puede ser útil para los diagnósticos o las pruebas.
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.
A partir de ATL 7.0, CComAutoThreadModule
está obsoleto: consulte Clases de módulo ATL para obtener más detalles.
ThreadAllocator m_Allocator;
Objeto que administra la selección de subprocesos. De manera predeterminada, el parámetro de plantilla de la clase ThreadAllocator
es CComSimpleThreadAllocator.
A partir de ATL 7.0, CComAutoThreadModule
está obsoleto: consulte Clases de módulo ATL para obtener más detalles.
int m_nThreads;
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.
A partir de ATL 7.0, CComAutoThreadModule
está obsoleto: consulte Clases de módulo ATL para obtener más detalles.
CComApartment* m_pApartments;
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.
A partir de ATL 7.0, CComAutoThreadModule
está obsoleto: consulte Clases de módulo ATL para obtener más detalles.
LONG Unlock();
Valor que puede ser útil para los diagnósticos o las pruebas.
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.