ブーストプロセスのmessage_queueを使用して文字列コンテンツを別のプロセスに渡そうとしています。私は整数を渡したときに何の問題を持っていないが、私はのstd ::文字列の基礎となるバッファを渡す場合、例外が文字列を送信するときにブーストメッセージキューがクラッシュする
コードは以下の通りですスローされます。 このクラッシュの原因は何でしょうか?あなたがメッセージキューを作成
// 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;
}
あなたのコードにはいくつかの問題があると思います。 'text.size()'を送信しても、終了するゼロは送信されません。受信時に 'message [0]'を使用することも避けたいと思います。それをしたい場合は、代わりにベクトルを使用してください。 '.data()'もよりクリーンです。ベクトルを文字列に変換するときも、終了するゼロを忘れないでください。 –
同じ問題。何も変わっていません。私のコードの下に。 std :: vector data; data.push_back( 'c'); data.push_back( 'i'); data.push_back( 'a'); data.push_back( 'o'); data.push_back( '\ n'); mq.send(data.data()、data.size()、0); –
@AdrianRoman終わりのNULはありません(少なくとも、意味のあるものはありません。std :: stringが追加するものは、純粋に従来のinterop用です)。実際には、文字列の中に多くのNUL文字がある可能性があります。 – sehe