gpt4 book ai didi

c++ - mq_notify 只启动一个线程

转载 作者:太空狗 更新时间:2023-10-29 12:07:19 25 4
gpt4 key购买 nike

我正在尝试使用 mq_notify 调用来启动带有 POSIX 消息队列的线程。一切似乎都是正确的,但我只有一个线程,它处理所有消息,但它永远不会终止。我的印象是我会得到新的线程来处理,但这似乎不对。

最佳答案

首先,mq_notify() 一次只会启动一个线程。其次,每次将消息放入队列时都不会启动线程;它们仅在空队列收到新消息时启动。第三,mq_notify() 是一次性交易。一旦一个线程被触发,如果你想在下一次空队列接收到消息时触发一个新线程,你需要重新注册 mq_notify()。通常,您的 threadfunc 应该做的第一件事就是重新注册。

由于您正在启动一个线程并处理消息,我猜测您没有以 O_NONBLOCK 方式打开队列或使用 mq_setattr() 将其重置为这样。当一个线程触发时,您希望清空队列中的所有消息,以便下次可以启动另一个线程。如果队列处于阻塞模式,您将在收到最后一条消息后阻塞,线程将永远不会结束。在非阻塞模式下,你想继续阅读直到你得到 errno == EAGAIN 然后结束线程。您应该可以开始使用新线程处理下一批消息。

关于c++ - mq_notify 只启动一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com