2010-08-09 161 views
0

我已經成功地通過使用以下命令創建的消息隊列:從消息接收隊列

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

現在我想隊列發送給我用一些其他的方法,

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

和我嘗試接受它在不同的過程:

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

我的結構bufHareTurtle是以下類型:

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

我的問題:發送成功和程序(兩個處理)運行過,但每當我送例如2無符號整數,我總是抵達接收到的值(在後來PROCESS)AS 0 EVRYTIME。有人能告訴我這段代碼中的錯誤是什麼,或者別的什麼可能是錯誤的。

+0

這2是位置變量的值 – higherDefender 2010-08-09 17:53:49

+1

檢查msgrcv和msgsnd的返回值並確保mtype> 0. – 2010-08-09 18:19:25

+1

您正在進行非阻塞讀/寫操作(IPC_NOWAIT ),你確定你確實收到了一條消息嗎? – nos 2010-08-09 18:22:47

回答

0

問題出在同步。發送到隊列由於插入睡眠而延遲。我糾正了它,錯誤消失了