如何清空Windows CE点对点消息队列

时间:2014-07-28 07:03:45

标签: windows-ce message-queue

注意:这个问题是关于Windows CE点对点消息队列,而不是GDI消息队列,而不是MSMQ。

当使用Windows CE点对点消息队列在两个线程之间进行通信时,我有时需要丢弃当前队列中的所有消息。似乎没有这样做的功能。我正在考虑的选项:

  • 关闭队列的一端,然后重新打开它。这会有用吗?
  • 反复读取队列中的消息,直到它为空。如果我读入一个微小的缓冲区(我认为这比读入一个完整大小的缓冲区更有效)我明白这将导致整个消息被丢弃。

1 个答案:

答案 0 :(得分:0)

如果队列配置了MSGQUEUE_ALLOW_BROKEN标志,则关闭句柄将不会删除队列中已有的消息,并且在您自己的应用程序未接收时不会阻止另一方附加新消息。关闭没有设置标志的队列将在对方尝试写入时立即生成错误,这可能会导致意外行为或无法再次通信。 读取所有消息应该适用于两种类型的队列,并且不会被其他应用程序以任何方式注意到。使用小缓冲区的想法很聪明,您可以节省一些时间,即使您收到ERROR_INSUFFICIENT_BUFFER,也应该从队列中删除该消息(至少这是文档所述的内容)。