使用mqqueue将数据读入缓冲区时遇到问题
问题描述:
我正在使用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
,我无法找到问题所在。
出了什么问题?
答
我在这里看到两个问题。首先,你的Foo TriviallyCopyable
?
其次,
char* buffer;
bytes_read = mq_receive(myOtherQueue, buffer, 1024, NULL);
我没有看到任何buffer
分配。
谢谢@SergeyA。我不明白你的第二点。 mq_receive设置缓冲变量 – Marc
@Marc,不,它将数据复制到提供的缓冲区。但是你的缓冲区没有分配。 – SergeyA
基于长度(1024)的mq_receive没有完成吗? – Marc