1
私はmqueueを使ってスレッド間の通信を行っています。オブジェクトを渡す際に問題があります。mqqueueを使用してバッファにデータを読み込むときのトラブル
mq_send
およびmq_receive
は、オブジェクトのパラメータとしてchar*
をとります。
私は以下の方法で使用します。
foo* foo = new foo();
foo->set_id(3);
mq_send(myQueue, (char*)foo, 1024, 1);
その後、
char* buffer;
while(true)
{
ssize_t bytes_read;
bytes_read = mq_receive(myQueue, buffer, 1024, NULL);
foo* foo = (foo*) buffer;
foo->get_id(); //equals 3
//Send the object to another queue
mq_send(myOtherQueue, buffer, 1024, 1);
}
これまでのところは良いです。
問題はここに
char* buffer;
while(true)
{
ssize_t bytes_read;
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);
foo* foo = (foo*) buffer;
foo->get_id(); //equals garbage 323234234
}
私はバッファをキャスト二度目ですが、私はゴミを取得します。 私はstatic_cast
とdynamic_cast
について読んでいますが、問題の原因を見つけることができません。
どうしたのですか?
@SergeyAありがとうございます。私はあなたの第二のポイントを理解していません。 mq_receiveはバッファ変数 – Marc
を@Marc、noに設定し、提供されたバッファにデータをコピーします。しかし、あなたのバッファは割り当てられません。 – SergeyA
lenght(1024)に基づいてmq_receiveで行われていませんか? – Marc