Como implementar um modelo de processos em pool thread apartment servidor COM no ATL

Traduções de Artigos Traduções de Artigos
Artigo: 244495 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

O ATL (Active Directory modelo biblioteca) Microsoft permite-lhe definir um conjunto de threads STA um ATL fora do processo de servidor com cada objecto criado em execução no seu próprio thread. Passos descritos na secção "Mais informação" deste artigo mostra como efectuar este procedimento.

Mais Informação

Os seguintes passos são necessários para criar objectos fora de um conjunto de threads:
  1. Derivar da classe CExeModule ou CServiceModule de:
    CComAutoThreadModule<>
    					
    CExeModule : public CComAutoThreadModule<>
    					
  2. Declarar DECLARE_CLASSFACTORY_AUTO_THREAD() em cada classe ATL que pode ser executado num segmento de pool STA
  3. Declarar DECLARE_NOT_AGGREGATABLE() em cada classe ATL que pode ser executado num segmento de pool STA
    DECLARE_NOT_AGGREGATABLE(CMyPooledObject)
    					
  4. Alterar método CExeModule::Unlock() ou CServiceModule::Unlock() para chamar o 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 está a ser efectuada para um serviço, terá de efectuar mais um passo. Alterar o seguinte código a partir 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 predefinição, ATL cria um conjunto de quatro módulos por processador. Pode alterar isto na chamada _Module.Init() na chamada de função tWinMain() especificando o número de threads na opcional para a frente parâmetro. Por predefinição, CComAutoThreadModule utiliza CComSimpleThreadAllocator como a atribuição de thread. CComSimpleThreadAllocator utiliza um esquema round robin simples para criar objectos no conjunto de threads.

Referências

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

Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
202128CORRECÇÃO: Servidor ATL EXE baseado CComAutoThreadModule poderá deixar de responder no registo

Propriedades

Artigo: 244495 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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