Como implementar um modelo de pool de segmento apartamento servidor COM ATL

Traduções deste artigo Traduções deste artigo
ID do artigo: 244495 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

A Microsoft Biblioteca ATL (Active Template) permite que você definir um pool de segmentos do STA em um ATL fora do processo de servidor com cada objeto criado em execução no seu próprio thread. As etapas na seção "Mais informações" deste artigo mostra como fazer isso.

Mais Informações

As etapas a seguir são necessários para criar objetos fora de um pool de segmentos:
  1. Derivar a classe CExeModule ou CServiceModule de:
    CComAutoThreadModule<>
    					
    CExeModule : public CComAutoThreadModule<>
    					
  2. Declarar DECLARE_CLASSFACTORY_AUTO_THREAD() em cada classe ATL que pode ser executado em um pool de threads STA
  3. Declarar DECLARE_NOT_AGGREGATABLE() em cada classe ATL que pode ser executado em um segmento de pool STA
    DECLARE_NOT_AGGREGATABLE(CMyPooledObject)
    					
  4. Alterar o método CExeModule::Unlock() ou CServiceModule::Unlock() para chamar de módulo:
    CComAutoThreadModule<>::Unlock()
    						
    LONG CExeModule::Unlock()
    {
       LONG l = CComAutoThreadModule<>::Unlock();
       if (l == 0)
       {
         bActivity = true;
         SetEvent(hEventShutdown); // tell monitor that we transitioned to zero
       }
       return l;
    }
    						
Se isso está sendo feito para um serviço, você precisará fazer mais uma etapa. Alterar o seguinte código de:
inline void CServiceModule::Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid)
{
   CComModule::Init(p, h, plibid);
				
para:
inline void CServiceModule::Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid)
{
   CComAutoThreadModule<>::Init(p, h, plibid);
				
por padrão, o ATL cria um pool de quatro segmentos por processador. Você pode alterar isso na chamada _Module.Init() na chamada de função tWinMain() especificando o número de segmentos na opcional para frente parâmetro. Por padrão, CComAutoThreadModule usa CComSimpleThreadAllocator como o alocador de thread. CComSimpleThreadAllocator usa um esquema simples round robin para criar objetos no pool de segmentos.

Referências

Para obter mais informações sobre pesquisa DECLARE_CLASS_FACTORY_AUTO_THREAD() CComAutoThreadModule e do Microsoft Developer Network (MSDN).

Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
202128CORRECÇÃO: O servidor ATL EXE com base em CComAutoThreadModule pode travar no registro

Propriedades

ID do artigo: 244495 - Última revisão: quinta-feira, 26 de maio de 2005 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft ActiveX Template Library 3.0 nas seguintes plataformas
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbmt kbarchitecture kbhowto kblocalsvr kbservice kbthread KB244495 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 244495

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com