从消息队列接收

Posted

技术标签:

【中文标题】从消息队列接收【英文标题】:Receiving from message queues 【发布时间】:2010-08-09 17:52:45 【问题描述】:

我已经使用以下命令成功创建了消息队列:

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)时,我总是将接收到的值(在后一个过程中)作为 0 EVRYTIME。有人可以告诉我这段代码中的错误是什么,或者其他地方可能有什么错误。

【问题讨论】:

这2是位置变量的值 检查msgrcv和msgsnd的返回值,确保mtype > 0。 你正在做非阻塞读/写(IPC_NOWAIT),你确定你真的收到消息了吗? 过去几周我们看到了很多兔子和乌龟的问题。每个人都上同一所学校? 我认为德里 IIT 的 CS 部门应该支持他们的学生,而不是 ***.com 的志愿者。我还没有看到那所学校的任何人做出重大贡献。当志愿者放弃时,这种做法会破坏网站的价值,因为他们厌倦了一遍又一遍地看同一个糟糕的问题。 【参考方案1】:

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

【讨论】:

以上是关于从消息队列接收的主要内容,如果未能解决你的问题,请参考以下文章

C IPC - 无法从队列接收消息

MQ消息队列的12点核心原理总结

@RabbitListener没有从队列接收消息

RabbitMQ系列队列绑定交换器

java 从SQS队列接收消息

Linux 进程间通信 --消息队列