作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 zmqpp ZeroMQ 的 C++ 绑定(bind)用于构建 PUB/SUB 通信。
在订阅者端,有 2 个线程 -- mainThread
和 pollingThread
。
pollingThread
包含对 zmqpp::poller::poll(zmqpp::poller::wait_forever)
的阻塞调用.
如何从 mainThread
中断/取消 pollingThread
对 poll()
的调用?
编辑 1:我正在使用 std::thread
,所以 I can't interrupt the thread .
EDIT2:这基本上是 pollingThread
的功能。
void pollingThread()
{
while (threadCanRun())
{
// wait indefinitely for a new message
if (mySocketPoller->poll())
{
functionToCallWhenAMessageArrives();
}
}
}
最佳答案
在我看来,推荐的方法是依靠消息传递来处理这个问题。
这意味着:
poll()
在您的 PAIR 套接字上。poll()
的调用。请注意,虽然推荐使用此解决方案,但您需要更改部分代码。
if (mySocketPoller->poll())
{
if (mySocketPoller->has_input(my_pair_socket))
{
// interrupted.
}
functionToCallWhenAMessageArrives();
}
关于c++ - 中断另一个线程对 zmqpp::poller::poll() 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32128770/
我是一名优秀的程序员,十分优秀!