2010-08-09 7 views
0

j'ai créé avec succès la file d'attente de messages en utilisant la commande suivante:Réception de messages des files d'attente

msgIdHareTurtle = msgget(keyHareTurtle, 0644 | IPC_CREAT | O_NONBLOCK); 

Maintenant, je veux envoyer la file d'attente à un autre processus je,

msgsnd(msgIdHareTurtle, (struct msgbuf *)&bufHareTurtle, sizeof(int), IPC_NOWAIT); 

et je essayez de le recevoir dans les différents processus:

msgrcv(msgIdHareTurtle, (struct msgbuf *)&bufHareTurtle, sizeof(int), 0, IPC_NOWAIT); 

ma structure bufHareTurtle est de type suivant:

typedef struct smsgbuf{ 
    long mtype; 
    unsigned int position; 
} smsgbuf; 

Ma question: L'envoi a réussi et le programme (les deux processus) est en cours d'exécution aussi, mais chaque fois que je vous envoie un entier non signé par exemple 2, je reçois toujours la valeur REÇU (EN COURS DES DERNIERS) AS 0 EVRYTIME. Quelqu'un pourrait-il me dire quelle est l'erreur dans ce code ou ce qui pourrait être une erreur ailleurs.

+0

ce 2 est la valeur de la variable de position – higherDefender

+1

Vérifier la valeur de retour de msgrcv et msgsnd et assurez-vous que mtype> 0. –

+1

Tu fais lecture/écriture non-blocage (IPC_NOWAIT), es-tu sûr d'avoir vraiment un message? – nos

Répondre

0

Le problème était là en synchronisation. L'envoi à la file d'attente a été retardé en raison du sommeil inséré entre les deux. Je l'ai corrigé et l'erreur était parti

Questions connexes