【发布时间】:2013-08-06 13:14:48
【问题描述】:
我正在使用系统 V 消息队列。在我的程序中,一个线程不断地将数据添加到消息队列中,另一个线程从消息队列中取出数据。
我的消息队列结构格式是
struct mymsgbuf {
long mtype;
char mtext[MAX_SEND_SIZE];
};
当我从消息中获取mtext 时,我需要按升序获取数据取决于tag。
我的消息队列接收
q_ret = msgrcv(msgqueue_id, (struct mymsgbuf *)&recvbuf, MAX_SEND_SIZE, 0, 0)
上述格式返回从第一个数据发送到消息队列中。
有什么技术可以按升序接收消息队列吗?
【问题讨论】:
-
您是否尝试过 posix 消息(“man mq_overview”),它具有与每条消息关联的优先级。问题是在 posix 消息队列的 linux 实现中可以有 32768 个不同的优先级。
-
posix消息队列的问题是我们只能存储10条消息,所以如果我们不从队列中读取数据会发生数据丢失,至少我需要在队列中保存25条消息
-
可以通过改变/proc/sys/fs/mqueue/msg_max来改变消息限制
标签: c++ c linux ipc message-queue