Komunikat zakleszczenia

Wątek, który wywołuje funkcję SendMessage , aby wysłać wiadomość do innego wątku nie można kontynuować wykonywania dopóki procedura okna, który odbierze komunikat zwraca. Jeżeli otrzymujący wątku plonów kontroli podczas przetwarzania wiadomości, wysyłanie wątku nie można kontynuować, wykonywania, ponieważ czeka na SendMessage powrócić. Jeżeli otrzymujący wątku następnie wysyła wiadomość do wywołania wątku, podczas gdy jest zablokowany, może to spowodować zakleszczenie występuje.

Należy zauważyć, że otrzymujący wątku potrzebują nie dają kontroli wyraźnie; Wywołanie dowolne z następujących funkcji może spowodować wątku plon Formant niejawnie.

DialogBox
DialogBoxIndirect
DialogBoxIndirectParam
DialogBoxParam
GetMessage
MessageBox
PeekMessage

Aby uniknąć potencjalnego zakleszczenia, należy rozważyć użycie funkcji SendNotifyMessage lub SendMessageTimeout . W przeciwnym razie procedurę okna można określić, czy wiadomość, którą otrzymało został wysłany przez inny wątek przez wywołanie funkcji InSendMessage . Przed wywołaniem funkcji z powyższej listy podczas przetwarzania wiadomości, procedurę okna po raz pierwszy powinna wywołać InSendMessage. Jeśli funkcja ta zwraca wartość TRUE, procedurę okna musi wywołać funkcję ReplyMessage przed jakiejkolwiek funkcji, powodujący, że na plon kontroli wątku.

Index