向不存在的窗口发送消息好吗?
Posted
技术标签:
【中文标题】向不存在的窗口发送消息好吗?【英文标题】:Is sending message to a non-existent window Ok? 【发布时间】:2014-07-02 18:08:00 【问题描述】:我有一个向窗口发送更新消息的线程,我使用::SendMessage()
和::PostMessage()
API。
我进出多个对话框,并通过窗口句柄 (m_hWnd
) 在线程中注册我当前所在的对话框。如果我完全退出,主应用程序窗口不会处理这些消息。出于这个原因,我没有注册那个窗口。此时线程将拥有一个现在不存在的旧窗口的句柄。
如果它向那个不存在的窗口发送消息可以吗?我假设它不应该造成任何伤害,但想仔细检查。
【问题讨论】:
向 NULL 窗口发送消息好吗?我不想要不必要的if-else
statements,但我可以在所有消息将被定向到的线程中将窗口句柄设置为 NULL。
@Deduplicator 不知道为什么人们会否决一个合法的问题?在 Objective-C 中,你可以在任何对象上调用任何方法,在 NULL 对象上调用方法是常用的技巧(如果我现在记得的话)
它发生了。无论如何,这一点可以说得更清楚。体内的文字墙有点排斥……不过,让我重新审视事物。
【参考方案1】:
不,不能将消息发布到已删除的窗口。 不能保证在前一个租户离开后,没有人会在那个地址开店。
如果您使用NULL
窗口句柄,您将向当前线程消息队列发布线程消息。 SendMessage
据我所知,谷歌应该是无操作的。
可能足够无害。
现在,我们变得棘手了:
在特定情况下无所谓,前提是行为良好的应用程序。
WM_NULL
之类的消息不应该让任何事情发生。
您使用 RegisterWindowMessage 在您的应用程序中全局注册的窗口消息,如果您能保证在此期间创建的任何应用程序窗口都不会阻塞它。
【讨论】:
句柄回收问题是 16 位 Windows 的问题,但自从 WinNT 以来不是问题,尽管 MS 不喜欢它:blogs.msdn.microsoft.com/oldnewthing/20070717-00/?p=25983以上是关于向不存在的窗口发送消息好吗?的主要内容,如果未能解决你的问题,请参考以下文章