Classe CComAutoThreadModule

A partir da ATL 7.0, está CComAutoThreadModule obsoleto: consulte Classes de módulo da ATL para obter mais detalhes.

Importante

Essa classe e seus membros não podem ser usados em aplicativos que são executados no Windows Runtime.

Sintaxe

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

Parâmetros

ThreadAllocator
[in] A classe que gerencia a seleção de thread. O valor padrão é CComSimpleThreadAllocator.

Membros

Métodos

Função Descrição
CreateInstance Seleciona um thread e, em seguida, cria um objeto no apartment associado.
GetDefaultThreads (Estático) Calcula dinamicamente o número de threads para o módulo com base no número de processadores.
Init Cria os threads do módulo.
Bloquear Incrementa a contagem de bloqueios no módulo e no thread atual.
Desbloquear Diminui a contagem de bloqueios no módulo e no thread atual.

Membros de dados

Membro de dados Descrição
Dwthreadid Contém o identificador do thread atual.
m_Allocator Gerencia a seleção de thread.
m_nThreads Contém o número de threads no módulo.
m_pApartments Gerencia os apartments do módulo.

Comentários

Observação

Essa classe está obsoleta, tendo sido substituída pelas classes derivadas CAtlAutoThreadModule e CAtlModule . As informações a seguir são para uso com versões mais antigas da ATL.

CComAutoThreadModulederiva de CComModule para implementar um servidor COM em pool de threads e apartment-model para EXEs e Windows serviços. CComAutoThreadModule usa CComApartment para gerenciar um apartment para cada thread no módulo.

Derive seu módulo de CComAutoThreadModule quando você deseja criar objetos em vários apartments. Você também deve incluir a DECLARE_CLASSFACTORY_AUTO_THREAD na definição de classe do objeto para especificar CComClassFactoryAutoThread como a fábrica de classes.

Por padrão, o AtL COM AppWizard (o Assistente de Project ATL no Visual Studio .NET) deriva seu módulo de CComModule. Para usar CComAutoThreadModule, modifique a definição de 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

Requisitos

Header: atlbase.h

CComAutoThreadModule::CreateInstance

A partir da ATL 7.0, está CComAutoThreadModule obsoleto: consulte Classes de módulo da ATL para obter mais detalhes.

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

Parâmetros

pfnCreateInstance
[in] Um ponteiro para uma função de criador.

riid
[in] O IID da interface solicitada.

Ppvobj
[out] Um ponteiro para o ponteiro de interface identificado por riid. Se o objeto não dá suporte a essa interface, ppvObj é definido como NULL.

Valor Retornado

Um valor HRESULT padrão.

Comentários

Seleciona um thread e, em seguida, cria um objeto no apartment associado.

CComAutoThreadModule::d wThreadID

A partir da ATL 7.0, está CComAutoThreadModule obsoleto: consulte Classes de módulo da ATL para obter mais detalhes.

DWORD dwThreadID;

Comentários

Contém o identificador do thread atual.

CComAutoThreadModule::GetDefaultThreads

A partir da ATL 7.0, está CComAutoThreadModule obsoleto: consulte Classes de módulo da ATL para obter mais detalhes.

static int GetDefaultThreads();

Valor Retornado

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

Comentários

Essa 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 padrão, esse valor de retorno é passado para o método Init para criar os threads.

CComAutoThreadModule::Init

A partir da ATL 7.0, está CComAutoThreadModule obsoleto: consulte Classes de módulo da ATL para obter mais detalhes.

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

Parâmetros

P
[in] Um ponteiro para uma matriz de entradas de mapa de objeto.

h
[in] O HINSTANCE passado para DLLMain ou WinMain.

alicate
[in] Um ponteiro para o LIBID da biblioteca de tipos associada ao projeto.

Nthreads
[in] O número de threads a serem criados. Por padrão, nThreads é o valor retornado por GetDefaultThreads.

Comentários

Inicializa membros de dados e cria o número de threads especificado por nThreads.

CComAutoThreadModule::Lock

A partir da ATL 7.0, está CComAutoThreadModule obsoleto: consulte Classes de módulo da ATL para obter mais detalhes.

LONG Lock();

Valor Retornado

Um valor que pode ser útil para diagnóstico ou teste.

Comentários

Executa um incremento atômico na contagem de bloqueios para o módulo e para o thread atual. CComAutoThreadModule usa a contagem de bloqueios de módulo para determinar se os clientes estão acessando o módulo. A contagem de bloqueios no thread atual é usada para fins estatísticos.

CComAutoThreadModule:: m_Allocator

A partir do ATL 7,0, CComAutoThreadModule é obsoleto: consulte classes de módulo do ATL para obter mais detalhes.

ThreadAllocator  m_Allocator;

Comentários

O objeto que gerencia a seleção de thread. Por padrão, o parâmetro de modelo de ThreadAllocator classe é CComSimpleThreadAllocator.

CComAutoThreadModule:: m_nThreads

A partir do ATL 7,0, CComAutoThreadModule é obsoleto: consulte classes de módulo do ATL para obter mais detalhes.

int m_nThreads;

Comentários

Contém o número de threads no módulo EXE. Quando init é chamado, m_nThreads é definido como o valor do parâmetro nThreads . O Apartment associado de cada thread é gerenciado por um objeto CComApartment .

CComAutoThreadModule:: m_pApartments

A partir do ATL 7,0, CComAutoThreadModule é obsoleto: consulte classes de módulo do ATL para obter mais detalhes.

CComApartment* m_pApartments;

Comentários

Aponta para uma matriz de objetos CComApartment , cada um dos quais gerencia um apartamento no módulo. O número de elementos na matriz é baseado no membro m_nThreads .

CComAutoThreadModule:: desbloquear

A partir do ATL 7,0, CComAutoThreadModule é obsoleto: consulte classes de módulo do ATL para obter mais detalhes.

LONG Unlock();

Valor Retornado

Um valor que pode ser útil para diagnóstico ou teste.

Comentários

Executa um decréscimo atômico na contagem de bloqueios para o módulo e para o thread atual. CComAutoThreadModule usa a contagem de bloqueios de módulo para determinar se os clientes estão acessando o módulo. A contagem de bloqueios no thread atual é usada para fins estatísticos.

Quando a contagem de bloqueios de módulo chega a zero, o módulo pode ser descarregado.

Confira também

Visão geral da classe
Classes de módulo