я использую mqueue общаться между потоками, и у меня возникают проблемы при передаче объектов.
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
,
Других решений пока нет …