2016-12-05 1 views
1

J'utilise mqueue pour communiquer entre les threads et je rencontre un problème lors du passage d'objets.Problème lors de la lecture des données dans le tampon à l'aide de mqqueue

Les mq_send et mq_receive prennent un char* comme paramètre pour l'objet.

Je les utilise de la manière suivante.

foo* foo = new foo(); 
foo->set_id(3); 
mq_send(myQueue, (char*)foo, 1024, 1); 

puis

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); 
} 

Jusqu'à présent, si bon.

Le problème est ici

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 
    } 

La deuxième fois que je jetai le tampon, je reçois des ordures. J'ai lu environ static_cast et dynamic_cast et je ne peux pas trouver quel est le problème.

Qu'est-ce qui ne va pas?

Répondre

4

Je vois deux problèmes ici. D'abord, est votre Foo TriviallyCopyable?

En second lieu,

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

Je ne vois aucune allocation pour buffer.

+0

Merci @SergeyA. Je ne comprends pas votre deuxième point. mq_receive définit la variable tampon – Marc

+0

@Marc, non, il copie les données dans le tampon fourni. Mais votre tampon n'est pas alloué. – SergeyA

+0

Cela ne se fait-il pas dans mq_receive en fonction de la longueur (1024)? – Marc