注意:这个问题是关于Windows CE点对点消息队列,而不是GDI消息队列,而不是MSMQ。
当使用Windows CE点对点消息队列在两个线程之间进行通信时,我有时需要丢弃当前队列中的所有消息。似乎没有这样做的功能。我正在考虑的选项:
答案 0 :(得分:0)
如果队列配置了MSGQUEUE_ALLOW_BROKEN标志,则关闭句柄将不会删除队列中已有的消息,并且在您自己的应用程序未接收时不会阻止另一方附加新消息。关闭没有设置标志的队列将在对方尝试写入时立即生成错误,这可能会导致意外行为或无法再次通信。 读取所有消息应该适用于两种类型的队列,并且不会被其他应用程序以任何方式注意到。使用小缓冲区的想法很聪明,您可以节省一些时间,即使您收到ERROR_INSUFFICIENT_BUFFER,也应该从队列中删除该消息(至少这是文档所述的内容)。