【发布时间】:2016-06-03 13:25:55
【问题描述】:
我目前正在开发一个通过 Posix 消息队列进行 IPC 的程序。我现在需要一个函数来删除该队列的每条消息。问题是:我的代码死锁。目前我正在尝试以下方法:
void clear_mq(std::string queue_name)
{
struct mq_attr mq_attrs = {0, 10, sizeof(uint8_t), 0};
mqd_t mq = ::mq_open(queue_name.c_str(), O_WRONLY | O_CREAT, 00644, &mq_attrs);
if (mq < 0)
{
std::cout << "Error opening Queue" << std::endl;
exit(-1);
}
struct mq_attr num_messages;
if (mq_getattr(mq, &num_messages) == -1)
{
std::cout << "Error!" << std::endl;
exit(-1);
}
while (num_messages.mq_curmsgs > 0)
{
uint8_t buf;
mq_receive(mq, (char *)&buf, sizeof(uint8_t), NULL);
if (mq_getattr(mq, &num_messages) == -1)
{
std::cout << "Error!" << std::endl;
exit(-1);
}
}
mq_close(mq);
}
谁能指出我做错了什么?我不明白为什么接收被阻塞......在我打电话给clear_mq的那一刻,没有其他人在接收块......
【问题讨论】:
标签: c++ posix message-queue