当我将 SendMessage
函数与 HWND_BROADCAST
一起使用时,应用程序挂断了。应用长时间无响应。
谁能解释一下为什么?
最佳答案
当有一个进程有一个顶级窗口,但没有在创建该窗口的线程上调用 GetMessage 或 PeekMessage 时,就会发生这种情况。
为了与 Windows 3.0 向后兼容,SendMessage 将不会返回,直到系统中的所有顶级窗口都响应了您的广播。在 Windows 成为多线程之前,这种行为是有意义的,因为 SendMessage(),即使发送到其他进程也永远不会阻塞。
但是从 Win32 开始,当您向另一个进程中的窗口发送消息时,实际发生的是您的线程阻塞,直到另一个进程中的线程唤醒并处理该消息。如果该线程正忙,或者只是不发送消息,那么您将永远等待。
因此,当您使用 HWND_BROADCAST 或以其他方式向其他进程拥有的窗口发送消息时,您应该始终使用 SendNotifyMessage
或 SendMessageTimeout
。
关于windows - SendMessage(HWND_BROADCAST, ....) 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951658/