ID do artigo: 175332 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 2.1 PROBLEMA: Mensagem de difusão processo causa bloqueio
Mais InformaçõesPara receber notificação quando um processo foi encerrado, um aplicativo Win32 pode chamar WaitForSingleObject() e especificar o identificador de processo do aplicativo a ser aguardado. Normalmente, isso fará com que o processo de espera para bloquear até que o aplicativo sendo aguardado termina. Em seguida, WaitForSingleObject() retornará que WAIT_OBJECT_0 e o processo de espera continuará a executar. Às vezes, aplicativos transmitir mensagens para algumas ou todas as outras janelas no sistema. Nesse caso o método acima fará com que uma situação de deadlock se o aplicativo espera não estiver livre para processar mensagens. Se o aplicativo espera está aguardando no seu segmento que processa as mensagens de janela, em seguida, nenhuma mensagem pode ser processada até que a espera seja concluída. Se o processo aguardado chamadas SendMessage() e transmite uma mensagem para a janela do processo de espera, um deadlock ocorre. O SendMessage() não retornará até que a mensagem é processada, e o processo de espera não pode expedir a mensagem até que sua chamada WaitForSingleObject() retorna. Para obter uma descrição de uma comum OLE manifestação desse problema, consulte o seguinte artigo do Knowledge Base: 136885
(http://support.microsoft.com/kb/136885/EN-US/
)
INFO: OLE segmentos devem enviar mensagens Para evitar que esse deadlock, o aplicativo espera deve esperar em um thread separado, liberando, portanto, o thread principal para processar mensagens. Quando o processo que estiver sendo aguardado conclui e WaitForSingleObject() retorna, o segmento em espera pode notificar o segmento principal enviando uma mensagem definida pelo usuário para a fila de mensagens da janela principal. O thread principal interpretará a mensagem definida pelo usuário como conclusão do processo esperava em de. Para obter mais informações sobre mensagens definidas pelo usuário, consulte o seguinte artigo do Knowledge Base: 86835
(http://support.microsoft.com/kb/86835/EN-US/
)
COMO: Definir mensagens privadas para uso do aplicativo Outra maneira de evitar esse problema é ter o segmento em espera chamar MsgWaitForMultipleObjects() em um loop, chama DispachMessage() quando uma mensagem precisa ser processada. Para obter um exemplo dessa técnica consulte o artigo do Knowledge Base mencionado acima, o problema de OLE (Q136885). SintomasUm deadlock ocorre quando um processo de espera no identificador de outro processo que transmite uma mensagem. CausaIsso ocorre quando o processo de espera está aguardando no segmento que processa as mensagens enviadas para a janela (a janela principal do thread). ResoluçãoPara evitar essa situação deadlock pode esperar o processo de espera em um thread separado, deixando o thread da janela principal livre para processar mensagens de janela ou use a API MsgWaitForMultipleObjects() em conjunto com as mensagens de expediçã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 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: 175332
(http://support.microsoft.com/kb/175332/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções deste artigo |






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


Voltar para o início