Partilhar via


CComAutoThreadModule Class

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

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

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

Parâmetros

ThreadAllocator
[entrada] 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 cria um objeto na acomodação associada.
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.
Lock Incrementa a contagem de bloqueios no módulo e no thread atual.
Unlock 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 as acomodações do módulo.

Comentários

Observação

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

CComAutoThreadModule deriva do CComModule para implementar um servidor COM com modelo de acomodação e thread para EXEs e serviços windows. CComAutoThreadModule usa CComApartment para gerenciar uma acomodação para cada thread no módulo.

Derive seu módulo de CComAutoThreadModule para criar objetos em várias acomodações. Você também deve incluir a macro 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 Projeto da ATL no Visual Studio .NET) derivará 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

Cabeçalho: atlbase.h

CComAutoThreadModule::CreateInstance

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

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

Parâmetros

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

riid
[in] O IID da interface solicitada .

ppvObj
[saída] Um ponteiro para o ponteiro da interface identificado por riid. Se o objeto não der suporte a essa interface, o ppvObj será definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Seleciona um thread e cria um objeto na acomodação associada.

CComAutoThreadModule::dwThreadID

A partir da ATL 7.0, CComAutoThreadModule está obsoleto: confira Classes de módulos 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, CComAutoThreadModule está obsoleto: confira Classes de módulos da ATL para obter mais detalhes.

static int GetDefaultThreads();

Valor de retorno

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 retornado é passado para o método Init para criar os threads.

CComAutoThreadModule::Init

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

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

Parâmetros

p
[entrada] Um ponteiro para uma matriz de entradas de mapa de objeto.

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

plibid
[entrada] Um ponteiro para o LIBID da biblioteca de tipos associada ao projeto.

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

Comentários

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

CComAutoThreadModule::Lock

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

LONG Lock();

Valor de retorno

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 bloqueio do módulo para determinar se algum cliente está acessando o módulo. A contagem de bloqueios no thread atual é usada para fins estatísticos.

CComAutoThreadModule::m_Allocator

A partir da ATL 7.0, CComAutoThreadModule está obsoleto: confira Classes de módulos da 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 do modelo de classe ThreadAllocator é CComSimpleThreadAllocator.

CComAutoThreadModule::m_nThreads

A partir da ATL 7.0, CComAutoThreadModule está obsoleto: confira Classes de módulos da 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. A acomodação associada de cada thread é gerenciado por um objeto CComApartment.

CComAutoThreadModule::m_pApartments

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

CComApartment* m_pApartments;

Comentários

Aponta para uma matriz de objetos CComApartment, cada uma das quais gerencia uma acomodação no módulo. O número de elementos na matriz baseia-se no membro m_nThreads.

CComAutoThreadModule::Unlock

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

LONG Unlock();

Valor de retorno

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

Comentários

Executa uma redução atômica na contagem de bloqueios para o módulo e para o thread atual. CComAutoThreadModule usa a contagem de bloqueio do módulo para determinar se algum cliente está acessando o módulo. A contagem de bloqueios no thread atual é usada para fins estatísticos.

Quando a contagem de bloqueios do módulo atingir zero, o módulo poderá ser descarregado.

Confira também

Visão geral da aula
Classes de módulo