2016-12-05 105 views
1

我正在使用mqueue在线程之间进行通信,而且我在传递对象时遇到问题。使用mqqueue将数据读入缓冲区时遇到问题

mq_sendmq_receivechar*作为对象的参数。

我以如下方式使用它们。

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

我在这里看到两个问题。首先,你的Foo TriviallyCopyable

其次,

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

我没有看到任何buffer分配。

+0

谢谢@SergeyA。我不明白你的第二点。 mq_receive设置缓冲变量 – Marc

+0

@Marc,不,它将数据复制到提供的缓冲区。但是你的缓冲区没有分配。 – SergeyA

+0

基于长度(1024)的mq_receive没有完成吗? – Marc