Это произойдет, когда есть процесс, который имеет окно верхнего уровня, но не вызывает GetMessage или PeekMessage в потоке, который создал окно.
Для обратной совместимости с Windows 3.0 SendMessage не вернется, пока все окна верхнего уровня в системе не ответят на вашу рассылку. Такое поведение имело смысл еще до того, как Windows стала многопоточной, поскольку SendMessage () даже при отправке в другие процессы никогда не блокировался.
Но начиная с Win32, когда вы отправляете сообщение в окно в другом процессе, на самом деле происходит блокировка вашего потока, пока поток в другом процессе не проснется и не обработает сообщение. Если этот поток занят или просто не качает сообщения, то вы ждете вечно.
По этой причине вы всегда должны использовать SendNotifyMessage
или SendMessageTimeout
, когда используете HWND_BROADCAST, или иным образом отправляете сообщения в окна, принадлежащие другим процессам.