2010-08-25 24 views
1

我想共享与多个进程数据。我第一次尝试使用Point to point message queue和多个阅读器,因为我读到P2P消息队列非常快。广播消息发送到多个进程(点对点消息队列具有多个阅读器)

在我的测试中,这似乎是多个读者从同一队列读,一旦消息被一位读者获取,其他读者将无法获取同样的信息。

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

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

回答

2

点至点的队列将正常工作。是的,当你发送,只有一个接收器将得到的消息发件人可以查询队列(通过调用GetMsgQueueInfo),看看有多少听众(在MSGQUEUEINFO的wNumReaders成员)也有,只是重复消息的次数。

+0

其实我已经想到了,但当时我不知道这些消息将交付同样(循环赛)。而且,如果读者线程中的一个决定从阅读中暂时休息一会儿,并对收到的消息进行一些冗长的处理,那么排队的消息是否会被错误地传递给其他阅读器并导致一些阅读器多次收到相同的消息?我是否应该确保读者不会从事兼职工作,只专注于阅读信息?谢谢 – 2010-08-26 03:47:43

0

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

编程的Windows Embedded CE 6.0开发人员参考,第四版,道格拉斯沸腾,页304

尽管警告,ctacke的IDE似乎是罚款,我的用例。

警告:
我的队列读者需要Sleep(10)他们获取他们的信息的共享,以允许其他读者去获取信息之后。没有Sleep(),只有一个阅读器进程通过等待被发信号通知。