windows - SendMessage(HWND_BROADCAST, ....) 挂起

标签 windows winapi

当我将 SendMessage 函数与 HWND_BROADCAST 一起使用时,应用程序挂断了。应用长时间无响应。

谁能解释一下为什么?

最佳答案

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

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

但是从 Win32 开始,当您向另一个进程中的窗口发送消息时,实际发生的是您的线程阻塞,直到另一个进程中的线程唤醒并处理该消息。如果该线程正忙,或者只是不发送消息,那么您将永远等待。

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

关于windows - SendMessage(HWND_BROADCAST, ....) 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951658/

相关文章:

windows - 查找调用 Windows 程序的快捷方式

c++ - 右侧的非法 token ::

c++ - 检查windows shell是否加载完启动程序

c++ - 如何在应用程序中更改 Windows ANSI api 的 CP_ACP(0)?

c++ - Visual Studio 2008,错误 c2039 : 'set_new_handler' : is not a member of 'std'

c++ - Windows 线程 - 如何使方法成为 Windows 中的线程函数?

c++ - 在不引用 Windows 上的当前目录的情况下解析相对路径

c++ - 关闭外部应用程序所需的 Windows 权限

c - 将 fopen 与临时系统变量一起使用

c - 使用IOCP时如何关闭SOCKET?