发送字符串时提升消息队列崩溃

boost message queue crashes when sending a string

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

在您创建消息队列的地方您有 sizeof( char ) 但您正试图将 4 个字符放入缓冲区。 Tracing 斥责异常在:

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

它适用于 "ciao"。