我正在尝试使用boost interprocess message_queue将字符串内容传递给另一个进程。我传递整数时没有问题,但是当我想传递std :: string底层的缓冲区时会抛出异常
boost::interprocess_exception::library_error
代码如下。 这次崩溃的原因是什么?
// SENDER process
//
message_queue::remove("messagequeue");
//Create a message_queue.
message_queue mq (create_only,"messagequeue",100,sizeof(char));
std::string text("ciao");
mq.send(text.data(), text.size(), 0);
sleep(100);
// RECV process
//
void get()
{
message_queue mq(open_only,"messagequeue");
unsigned int priority;
message_queue::size_type recvd_size;
std::string message;
message.resize(100);
mq.receive(&message[0], 100, recvd_size, priority);
message.resize(recvd_size);
std::cout << message << std::endl;
sleep(100000);
}
int main()
{
boost:: thread t;
t = boost::thread(get);
t.join();
return 1;
}
答案 0 :(得分:3)
在创建消息队列的地方,你有sizeof( char )
,但是你试图在缓冲区中放入4个字符。跟踪激活异常位于:
if (buffer_size > p_hdr->m_max_msg_size) {
throw interprocess_exception(size_error);
}
在message_queue.hpp中。用:
bi::message_queue mq( bi::open_or_create,"messagequeue", 100, 4 );
适用于&#34; ciao&#34;。