В настоящее время я работаю над программой, которая выполняет IPC через очереди сообщений Posix. Теперь мне нужна функция, которая удаляет каждое сообщение этой очереди. Проблема в том, что мои кодовые блокировки. В настоящее время я стараюсь:Как очистить очередь сообщений 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