发送字符串时,boost消息队列崩溃

时间:2016-09-22 10:08:17

标签: c++ boost boost-interprocess

我正在尝试使用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;
  }

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;。