Partilhar via


Classe CComAutoThreadModule

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

Importante

Esta classe e os seus membros não podem ser usados em aplicações que sejam executadas no Windows Runtime.

Sintaxe

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

Parâmetros

ThreadAllocator
[dentro] A classe que gere a seleção de threads. O valor padrão é CComSimpleThreadAllocator.

Membros

Methods

Função Description
CreateInstance Seleciona uma thread e depois cria um objeto no apartamento associado.
GetDefaultThreads (Estática) Calcula dinamicamente o número de threads para o módulo com base no número de processadores.
Init Cria as threads do módulo.
Bloqueio Incrementa a contagem de bloqueios no módulo e na thread atual.
Desbloquear Diminui a contagem de bloqueios no módulo e na thread atual.

Membros de Dados

Membro de dados Description
dwThreadID Contém o identificador do tópico atual.
m_Allocator Gere a seleção de fios.
m_nThreads Contém o número de threads no módulo.
m_pApartments Gere os apartamentos do módulo.

Observações

Observação

Esta classe está obsoleta, tendo sido substituída pelas classes derivadas de CAtlAutoThreadModule e CAtlModule . A informação que se segue destina-se a ser usada com versões mais antigas de ATL.

CComAutoThreadModule deriva do CComModule para implementar um servidor COM de modelo apartamento em pool-pool de threads para EXEs e serviços Windows. CComAutoThreadModule usa o CComApartment para gerir um apartamento para cada thread do módulo.

Deriva o teu módulo a partir CComAutoThreadModule do momento em que queres criar objetos em vários apartamentos. Deve também incluir a macro DECLARE_CLASSFACTORY_AUTO_THREAD na definição de classe do seu objeto para especificar CComClassFactoryAutoThread como a fábrica de classes.

Por defeito, o ATL COM AppWizard (o ATL Project Wizard no Visual Studio .NET) irá derivar o seu módulo a partir de CComModule. Para usar CComAutoThreadModule, modificar a definição da classe. Por exemplo:

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;
};

Hierarquia de herança

_ATL_MODULE

CAtlModule

IAtlAutoThreadModule

CAtlModuleT

CAtlAutoThreadModuleT

CComModule

CComAutoThreadModule

Requerimentos

Cabeçalho: atlbase.h

CComAutoThreadModule::CreateInstance

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

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

Parâmetros

pfnCreateInstance
[dentro] Um apontador para uma função criadora.

riid
[dentro] O IID da interface solicitada.

ppvObj
[fora] Um ponteiro para o ponteiro de interface identificado por riid. Se o objeto não suportar esta interface, ppvObj é definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

Observações

Seleciona uma thread e depois cria um objeto no apartamento associado.

CComAutoThreadModule::d wThreadID

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

DWORD dwThreadID;

Observações

Contém o identificador do tópico atual.

CComAutoThreadModule::GetDefaultThreads

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

static int GetDefaultThreads();

Valor de retorno

O número de threads a criar no módulo EXE.

Observações

Esta função estática calcula dinamicamente o número máximo de threads para o módulo EXE, com base no número de processadores. Por defeito, este valor de retorno é passado ao método Init para criar as threads.

CComAutoThreadModule::Init

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

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

Parâmetros

p
[dentro] Um ponteiro para um array de entradas de mapa de objetos.

h
[dentro] A HINSTÂNCIA passou para DLLMain ou WinMain.

plibid
[dentro] Um apontador para o LIBID da biblioteca de tipos associada ao projeto.

nThreads
[dentro] O número de threads a criar. Por defeito, nThreads é o valor devolvido pelo GetDefaultThreads.

Observações

Inicializa os membros dos dados e cria o número de threads especificados por nThreads.

CComAutoThreadModule::Lock

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

LONG Lock();

Valor de retorno

Um valor que pode ser útil para diagnósticos ou testes.

Observações

Realiza um incremento atómico na contagem de bloqueios para o módulo e para a thread atual. CComAutoThreadModule utiliza a contagem de bloqueios do módulo para determinar se algum cliente está a aceder ao módulo. A contagem de bloqueios no thread atual é usada para fins estatísticos.

CComAutoThreadModule::m_Allocator

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

ThreadAllocator  m_Allocator;

Observações

A seleção de threads que gere o objeto. Por defeito, o ThreadAllocator parâmetro do modelo de classe é CComSimpleThreadAllocator.

CComAutoThreadModule::m_nThreads

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

int m_nThreads;

Observações

Contém o número de threads no módulo EXE. Quando o Init é chamado, m_nThreads é definido para o valor do parâmetro nThreads . O apartamento associado a cada thread é gerido por um objeto CComApartment .

CComAutoThreadModule::m_pApartments

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

CComApartment* m_pApartments;

Observações

Aponta para um array de objetos CComApartment , cada um dos quais gere um apartamento no módulo. O número de elementos no array baseia-se no m_nThreads membro.

CComAutoThreadModule::Unlock

A partir do ATL 7.0, CComAutoThreadModule está obsoleto: consulte Classes de Módulos ATL para mais detalhes.

LONG Unlock();

Valor de retorno

Um valor que pode ser útil para diagnósticos ou testes.

Observações

Realiza um decremento atómico na contagem de bloqueios para o módulo e para a thread atual. CComAutoThreadModule utiliza a contagem de bloqueios do módulo para determinar se algum cliente está a aceder ao módulo. A contagem de bloqueios no thread atual é usada para fins estatísticos.

Quando o número de bloqueios do módulo atinge zero, o módulo pode ser descarregado.

Consulte também

Visão geral da classe
Classes de Módulo