2016-12-05 11 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_cast и dynamic_cast, и я не могу найти, в чем проблема.

Что не так?

ответ

4

Здесь я вижу две проблемы. Во-первых, это ваш Foo TriviallyCopyable?

Во-вторых,

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

Я не вижу никакого распределения для buffer.

+0

спасибо @SergeyA. Я не понимаю вашего второго момента. mq_receive устанавливает буферную переменную – Marc

+0

@Marc, нет, она копирует данные в предоставленный буфер. Но ваш буфер не выделен. – SergeyA

+0

Это не сделано в mq_receive на основе длины (1024)? – Marc

 Смежные вопросы

  • Нет связанных вопросов^_^