2016-12-05 7 views
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_castdynamic_castについて読んでいますが、問題の原因を見つけることができません。

どうしたのですか?

答えて

4

ここに2つの問題があります。まず、あなたのFooはTriviallyCopyableですか?

第二に、

char* buffer; 
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL); 

私はbufferための任意の割り当てが表示されません。

+0

@SergeyAありがとうございます。私はあなたの第二のポイントを理解していません。 mq_receiveはバッファ変数 – Marc

+0

を@Marc、noに設定し、提供されたバッファにデータをコピーします。しかし、あなたのバッファは割り当てられません。 – SergeyA

+0

lenght(1024)に基づいてmq_receiveで行われていませんか? – Marc

関連する問題