有没有人有一些示例代码显示序列化std :: string的管道,通过boost :: interprocess :: message_queue发送它并再次将其恢复出去?
答案 0 :(得分:8)
您需要序列化数据,因为boost :: interprocess :: message_queue在字节数组上运行。如果您的所有消息都是字符串,请执行以下操作:
size_t const max_msg_size = 0x100;
boost::interprocess::message_queue q(..., max_msg_size);
// sending
std::string s(...);
q.send(s.data(), s.size(), 0);
// receiving
std::string s;
s.resize(max_msg_size);
size_t msg_size;
unsigned msg_prio;
q.receive(&s[0], s.size(), msg_size, msg_prio);
s.resize(msg_size);
答案 1 :(得分:1)
解决方案可以是编写一个函数,该函数将要发送的对象作为输入(例如,您的可变大小字符串),并输出一个固定大小的对象的容器。
类似的东西:
int Tokenize(std::vector<MessageToken>&, const Message&) const;
int Merge(Message&, const std::vector<MessageToken>&) const;
然后可以从message_queue中发送/提取这些固定大小的对象。
与Maxim解决方案相比的优势在于您无需指定max_msg_size
参数。