Joh*_*ler 19
当有一个进程具有顶级窗口但未在创建该窗口的线程上调用GetMessage或PeekMessage时,就会发生这种情况.
为了向后兼容Windows 3.0,直到系统中的所有顶级窗口都响应了您的广播,SendMessage才会返回.在Windows多线程之前,这种行为有意义,因为SendMessage(),即使发送到其他进程也永远不会阻塞.
但是从Win32开始,当您将SendMessage发送到另一个进程中的窗口时,实际发生的是您的线程阻塞,直到另一个进程中的线程唤醒并处理该消息.如果那个线程忙,或者只是不抽信息,那么你就等了.
因此,您应始终使用SendNotifyMessage或SendMessageTimeout在使用HWND_BROADCAST时,或以其他方式向其他进程拥有的窗口发送消息.
这是因为当SendMessage调用 with 时HWND_BROADCAST,它首先枚举所有可用的窗口,然后调用SendMessage这些窗口中的每一个。SendMessage在窗口完成处理消息之前不会返回。如果单个窗口需要很长时间来处理消息,则整个调用将被延迟。
| 归档时间: |
|
| 查看次数: |
9255 次 |
| 最近记录: |