【发布时间】:2015-10-20 17:28:33
【问题描述】:
我有一个应用程序,其中一个 dll 模块负责处理发布到其隐藏窗口的用户定义消息。假设负责处理这些消息的线程在处理其他任务时被挂起,并且在此期间,如果另一个低级别层将消息发布(使用PostMessage)到该窗口,那么发布的消息会发生什么?
我的应用程序有时不会收到这些消息,并且低层中的日志表明他们已经发布了消息,但我的应用程序没有收到它。我怀疑由于线程很忙或挂起,它不会处理这些消息。我该如何解决这个问题?
【问题讨论】:
-
它们被添加到消息队列中,以后只要您停止挂起,您就会得到它们。这是一个有限资源,队列大小的默认配额是 10,000 条消息。当队列已满时,调用 PostMessage() 的代码会返回 FALSE。没有人检查过。
-
如果拥有窗口的线程被阻塞/挂起,它不会从其消息队列中检索和发送新消息,因此新消息将简单地留在队列中,最终队列将填满.所以不要一开始就挂线程。如果您需要执行冗长的操作,请将其移至自己的线程。
-
感谢回复
标签: winapi window message-queue hwnd