我目前正在研究通過Posix消息隊列執行IPC的程序。我現在需要一個刪除該隊列的每條消息的函數。問題是:我的代碼死鎖。目前我正在嘗試以下操作:如何清除POSIX消息隊列?
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
沒有人在接收塊...
是的,但我確保它只有在消息可用時才通過'mq_receive'調用(通過'mq_getattr')。結果是一個好點,謝謝! – Nidhoegger