Сообщения взаимоблокировок

Поток, вызывающий функцию SendMessage для отправки сообщения в другой поток не может продолжить выполнение до тех пор, пока процедура окна, получающая сообщение возвращается. Если принимающее поток управления при обработке сообщения, направляющего поток не может продолжить выполнение, потому что он ждет SendMessage для возвращения. Если принимающего поток затем отправляет сообщение в вызывающий поток, пока отчет заблокирован, это может привести к взаимоблокировке происходят.

Обратите внимание, что получение потока не нужно принести управления явно; вызов любого из следующих функций может вызвать поток для управления неявно.

Диалоговое окно
DialogBoxIndirect
DialogBoxIndirectParam
DialogBoxParam
GetMessage
MessageBox
PeekMessage

Чтобы избежать потенциальных взаимоблокировок, рассмотрите возможность использования функции SendNotifyMessage или SendMessageTimeout . В противном случае процедуре окна можно определить ли она получила сообщения другим потоком путем вызова функции InSendMessage . Перед вызовом функций из предыдущего списка при обработке сообщения, Оконная процедура должна вызвать InSendMessage. Если эта функция возвращает значение TRUE, процедура окна необходимо вызвать функцию ReplyMessage до какой-либо функции, вызывающего потока для элемента управления.

Index