CORREC플O: EXE ATL Server com base em CComAutoThreadModule pode bloqueio no registo

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

Sintomas

Um servidor ATL EXE baseado CComAutoThreadModule <> pode deixar de responder quando a ser registado ou registo anulado.

Causa

CComAutoThreadModule<>::Init() chamado na WinMain() cria um conjunto de threads (por predefini豫o 4 threads). O processo de destrui豫o de CComAutoThreadModule global torna determinado que estes threads terminar antes que termine o processo. Isto acontece, colocando uma mensagem WM_QUIT para cada um dos threads no conjunto de threads e chamar WaitForSingleObject() no identificador de thread. Os threads so agendados que os threads no conjunto de no ter chamado GetMessage() e para a fila de mensagem no criada. Isto faz com que o PostThreadMessage() falha. Por conseguinte, os threads no conjunto de no terminar e WaitForSingleObject() infinitamente aguarda threads para terminar.

Resolu豫o

No ficheiro Altcom.h, dentro do directrio de vc98\atl\include do processo de destrui豫o na fun豫o CComAutoThreadModule substitua o seguinte cdigo:
   ::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT, 0, 0);
				

com este cdigo:
   while (::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT,
      0, 0) == 0) ::Sleep(100);
				

Ponto Da Situa豫o

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no incio deste artigo.

Este problema foi corrigido no Microsoft Visual C++. NET.

Mais Informa豫o

  1. Utilize Appwizard para criar um ATL EXE .
  2. Inserir qualquer tipo de objecto ATL no projecto.
  3. Nos Stdafx.h, substitua CComModule CComAutoThreadModule<ccomsimplethreadallocator>.
  4. Crie o projecto.

    Nota : possvel que o servidor poder no reagir neste momento uma vez que o passo de compila豫o personalizado regista o servidor.
  5. No menu Project defini寤es em tipo de separador de depura豫o " / RegServer " na caixa de dilogo Argumentos de programa .
  6. Execute o servidor no depurador.

    Nota : se que no terminar liga豫o pela primeira vez, repita este passo. Uma vez que este relacionados com a temporiza豫o, o problema no poder reproduzir em determinados computadores.

Propriedades

Artigo: 202128 - ltima reviso: 11 de dezembro de 2003 - Reviso: 2.0
A informa豫o contida neste artigo aplica-se a:
  • Microsoft ActiveX Template Library 3.0쟮as 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 kbbug kbfix kblocalsvr kbthread KB202128 KbMtpt
Tradu豫o automtica
IMPORTANTE: Este artigo foi traduzido por um sistema de tradu豫o automtica (tambm designado por Machine translation ou MT), no 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 Portugus a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradu豫o automtica no sempre perfeita. Esta pode conter erros de vocabulrio, sintaxe ou gramtica? erros semelhantes aos que um estrangeiro realiza ao falar em Portugus. A Microsoft no responsvel por incoerncias, erros ou estragos realizados na sequncia da utiliza豫o dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualiza寤es frequentes ao software de tradu豫o automtica (MT). Obrigado.
Clique aqui para ver a verso em Ingls deste artigo: 202128

Submeter comentrios

 

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