Win32 消息队列有多深?

Posted

技术标签:

【中文标题】Win32 消息队列有多深?【英文标题】:How deep is the Win32 message queue? 【发布时间】:2010-09-12 12:09:15 【问题描述】:

标准窗口的队列可以容纳多少条消息?队列溢出时会发生什么?

GetMessage 及其亲属的文档对此没有任何说明,PeekMessage 仅针对某些类别的消息为您提供是/否,而不是消息计数。

This page 说队列是使用内存映射文件实现的,并且没有消息计数限制,但该页面是关于 WinCE 的。这是否也适用于桌面 Win32?

【问题讨论】:

【参考方案1】:

默认为10000,但可以通过注册表调整。

如果队列溢出,则 PostMessage 失败。

这里的文档:

PostMessage function on MSDN

【讨论】:

这涵盖了 2000/XP - 关于 Vista 的任何想法? 我刚刚在 Vista Business SP1 机器上查看了那篇文章中列出的注册表项,它设置为 10000。我不知道这是否是决定 Vista 上队列长度的唯一因素,不过。 我不知道,但不太可能有所不同。 Vista 没有那么革命性,我不认为... 还有一件事——如果你想使用消息队列,嗯,一个由另一个线程提供的队列,我想你会对结果感到失望。您最终会得到一个无响应的 GUI。我们公司在这种失败的设计技术方面拥有丰富的经验。 你好科里,谢谢你的回答。上述限制和注册表项(可以调整)也适用于 Windows 8。【参考方案2】:

如 MSDN 文章中所述,如果您需要担心消息队列的大小,最好重新设计您的应用程序。

【讨论】:

在这种情况下,我们在队列的另一边;我们的设备驱动程序正在发布消息,几分钟后一个玩具 Flash 应用程序陷入了困境。

以上是关于Win32 消息队列有多深?的主要内容,如果未能解决你的问题,请参考以下文章

如何安装消息队列

消息引擎RabbitMQ有多高深?

在Drupal的popups api ajax中,drupal_set_message生成的消息队列有多清楚?

FreeRTOS消息队列 & ESP32使用

RabbitMQ案列

用SendNotifyMessage代替PostMessage避免消息丢失(WIN7下消息队列的默认长度是10000,队列满后消息将被丢弃)