发送字符串时提升消息队列崩溃
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"。
我正在尝试使用 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"。