Mensagem Deadlocks

Um thread que chama o SendMessage função para enviar uma mensagem para outro thread não é possível continuar executando até que o procedimento de janela que recebe a mensagem retorna. Se o segmento de recepção produz controle ao processar a mensagem, o segmento de envio não pode continuar a execução, porque está aguardando para SendMessage retornar. Se o segmento de recepção, em seguida, envia uma mensagem para o thread de chamada enquanto ele estiver bloqueado, pode causar um deadlock ocorrer.

Observe que o segmento de recepção não precisa produzir controle explicitamente; chamar qualquer um das seguinte funções pode causar um thread a ceder o controle implicitamente.

DialogBox
DialogBoxIndirect
DialogBoxIndirectParam
DialogBoxParam
GetMessage
MessageBox
PeekMessage

Para evitar deadlocks potenciais, considere usar as funções SendNotifyMessage ou SendMessageTimeout . Caso contrário, um procedimento de janela pode determinar se uma mensagem que recebeu foi enviada por outro thread, chamando a função InSendMessage . Antes de chamar qualquer função na lista anterior ao processar uma mensagem, o procedimento janela deve primeiro chamar InSendMessage. Se essa função retorna TRUE, o procedimento janela deve chamar a função ReplyMessage antes de qualquer função que faz com que o thread a ceder o controle.

Index