没有大小限制的Windows进程间消息传递

时间:2014-06-03 10:43:31

标签: c++ message-queue interprocess boost-interprocess

我的任务是在没有大小限制的进程之间创建消息传递队列(最多1 Mb,但大多数消息的大小为128字节)。

所以,我不能使用:

  • boost :: interproc :: message_queue - 尺寸有限;
  • zeromq(inproc://) - 它未针对Windows实施;
  • 套接字(zeromq或任何其他套接字接口) - 我不能占用任何端口;

这就是为什么我决定使用 boost :: interproc :: shared_memory_object

我打算截断最多1Mb的内存,然后在那里放置任何带有标题的消息,这将定义它的大小或将通知它是最后一条消息。

要写入的函数 - 将锁定已命名的互斥锁,写入堆消息的末尾并移动“last message”标志以显示它。

要读取的函数 - 将锁定它,读取全部并删除,将“完成标志”移动到堆的开头。

看起来不错,但问题是每次我想读/写时都要映射1MB的内存。我担心这可能是长时间的操作。这是真的吗?

如果映射这么大的堆是高成本操作,我该如何解决? 也许没有消息大小限制的interproc消息队列有另一种机制?

0 个答案:

没有答案