2010-08-09 247 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

问题出在同步。发送到队列由于插入睡眠而延迟。我纠正了它,错误消失了