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?
Merci @SergeyA. Je ne comprends pas votre deuxième point. mq_receive définit la variable tampon – Marc
@Marc, non, il copie les données dans le tampon fourni. Mais votre tampon n'est pas alloué. – SergeyA
Cela ne se fait-il pas dans mq_receive en fonction de la longueur (1024)? – Marc