Artigo: 175332 - Última revisão: terça-feira, 21 de Novembro de 2006 - Revisão: 2.1 PROBLEMA: Mensagem de difusão de processo devido a bloqueio total
Mais InformaçãoPara receber notificação quando um processo terminou, uma aplicação de Win32 pode chamar WaitForSingleObject() e especificar o identificador de processo da aplicação a ser aguardado. Normalmente, Isto fará com que o processo de espera para bloquear até que a aplicação a ser aguardada terminar. Em seguida, WaitForSingleObject() devolverá que WAIT_OBJECT_0 e o processo em espera vão continuar a executar. Por vezes, aplicações de mensagens de difusão para algumas ou todas as outras janelas no sistema. Neste caso o método acima irá provocar uma situação de impasse se a aplicação em espera não está livre para processar mensagens. Se a aplicação em espera está à espera do thread que processa mensagens de janela, em seguida, não existem mensagens podem ser processadas até que o tempo de espera seja concluído. Se o processo aguardado chamadas SendMessage() e difunde uma mensagem para a janela do processo de espera, um impasse resulta. Não irá devolver o SendMessage() até a mensagem é processada e o processo de espera não é possível de envio a mensagem até que a chamada WaitForSingleObject() devolve. Para uma descrição de um comum OLE manifestation deste problema, consulte o seguinte artigo da base de dados de conhecimento: 136885
(http://support.microsoft.com/kb/136885/EN-US/
)
INFO: OLE threads tem de despacho mensagens Para impedir que este impasse, deve esperar que a aplicação em espera num thread separado, assim como libertar o thread principal para mensagens de processo. Quando o processo que está a ser aguardado conclui e WaitForSingleObject() devolve, o thread em espera pode notificar o thread principal enviando uma mensagem definida pelo utilizador para a fila da janela principal. O thread principal interpretarão mensagem definidos pelo utilizador como a conclusão do processo aguardado no. Para mais informações sobre mensagens definidos pelo utilizador, consulte o seguinte artigo da base de dados de conhecimento: 86835
(http://support.microsoft.com/kb/86835/EN-US/
)
COMO: Definir mensagens privadas para utilização de aplicações Outra forma de evitar este problema é ter o thread de espera de chamada MsgWaitForMultipleObjects() num ciclo, que chama DispachMessage() quando uma mensagem necessita de ser processado. Para obter um exemplo desta técnica consulte o artigo da base de dados de conhecimento da referida acima sobre o problema OLE (Q136885). SintomasUm impasse ocorre quando um processo aguarda no identificador de outro processo que difunde uma mensagem. CausaIsto ocorre quando o processo em espera está à espera num thread que processa as mensagens enviadas para a janela (o thread de janela). ResoluçãoPara evitar esta situação impasse pode aguardar o processo em espera num thread separado, deixando o thread de janela livre para processar mensagens de janela ou utilizar a API MsgWaitForMultipleObjects() em conjunto com as mensagens de emissão. A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: 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: 175332
(http://support.microsoft.com/kb/175332/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções de Artigos |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar ao topo