SendMessage(HWND_BROADCAST,....)挂起

AH.*_*AH. 15 windows winapi

当我使用theSendMessage函数时HWND_BROADCAST,应用程序挂起.申请长时间没有回复.

有谁能解释为什么?

Joh*_*ler 19

当有一个进程具有顶级窗口但未在创建该窗口的线程上调用GetMessage或PeekMessage时,就会发生这种情况.

为了向后兼容Windows 3.0,直到系统中的所有顶级窗口都响应了您的广播,SendMessage才会返回.在Windows多线程之前,这种行为有意义,因为SendMessage(),即使发送到其他进程也永远不会阻塞.

但是从Win32开始,当您将SendMessage发送到另一个进程中的窗口时,实际发生的是您的线程阻塞,直到另一个进程中的线程唤醒并处理该消息.如果那个线程忙,或者只是不抽信息,那么你就等了.

因此,您应始终使用SendNotifyMessageSendMessageTimeout在使用HWND_BROADCAST时,或以其他方式向其他进程拥有的窗口发送消息.


Dum*_*Guy 5

这是因为当SendMessage调用 with 时HWND_BROADCAST,它首先枚举所有可用的窗口,然后调用SendMessage这些窗口中的每一个。SendMessage在窗口完成处理消息之前不会返回。如果单个窗口需要很长时间来处理消息,则整个调用将被延迟。