- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 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/
我正在尝试使用 mq_notify 调用来启动带有 POSIX 消息队列的线程。一切似乎都是正确的,但我只有一个线程,它处理所有消息,但它永远不会终止。我的印象是我会得到新的线程来处理,但这似乎不对。
我有两个进程,server.c 和 client.c 它们通过 POSIX 消息队列进行通信。客户端向队列发送一条消息,mq_notify 告诉服务器一条消息已添加到队列中。然后信号处理程序将接收并处
我正在使用 mq_notify 来获取有关消息队列上的事件的通知,但我注册的通知程序函数没有被调用。我错过了什么吗? 我将我的代码片段粘贴在下面: static void sigNotifier(un
我正在使用 POSIX 队列 (mqueue) 在线程之间进行通信。 我遇到的问题是 mq_notify 在我的 Cygwin 单元测试中没有按预期运行。它永远不会触发,即使消息队列从空变为 1 条消
我是一名优秀的程序员,十分优秀!