向多个进程广播消息(具有多个读取器的点对点消息队列)

时间:2010-08-25 07:48:46

标签: winapi windows-mobile windows-ce ipc windows-embedded

我想与多个进程共享数据。我的第一次尝试是使用Point to point message queue和多个读者,因为我读到P2P消息队列非常快。

在我的测试中,似乎多个读者正在从同一个队列中读取,一旦一个读者获取了一条消息,其他读者将无法获取相同的消息。

用于将数据共享到多个进程的更好的IPC是什么? 数据经常更新(每秒多次),所以我认为WM_COPYDATA不是一个好的选择,会干扰“正常”的消息队列。

我的第二次尝试可能是共享内存+互斥+事件

2 个答案:

答案 0 :(得分:2)

点对点队列可以正常工作。是的,当你发送时,只有一个接收者会收到消息但是发送者可以查询队列(通过调用GetMsgQueueInfo)来查看有多少听众({{3}的wNumReaders成员) })并且简单地重复该消息很多次。

答案 1 :(得分:0)

  

最后,对于多个线程或进程来说,为读访问或写访问打开相同的队列是完全有效的。点对点消息队列支持多个读取器和多个写入器。例如,这种做法允许一个写入器进程向多个客户端进程或多个写入器进程发送消息,以将消息发送到单个读取器进程。但是,无法将消息发送到特定的读者进程。当进程或线程读取队列时,它将读取下一个可用消息。也无法向多个读者广播消息。

     

编程Windows Embedded CE 6.0开发人员参考,第四版,Douglas Boiling,第304页

尽管有这样的警告,ctacke的ide似乎对我的用例很好。

<强>警告:
我的队列读者在获取他们的消息份额后需要Sleep(10)以允许其他读者去取消消息。如果没有Sleep(),则只会等待一个读者进程发出信号。