gpt4 book ai didi

c++ - 中断另一个线程对 zmqpp::poller::poll() 的调用

转载 作者:太空狗 更新时间:2023-10-29 21:39:46 29 4
gpt4 key购买 nike

我正在使用 zmqpp ZeroMQ 的 C++ 绑定(bind)用于构建 PUB/SUB 通信。

在订阅者端,有 2 个线程 -- mainThreadpollingThread

pollingThread 包含对 zmqpp::poller::poll(zmqpp::poller::wait_forever) 的阻塞调用.

如何从 mainThread 中断/取消 pollingThreadpoll() 的调用?

编辑 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();
}
}
}

最佳答案

在我看来,推荐的方法是依靠消息传递来处理这个问题。

这意味着:

  1. 创建一对 INPROC PAIR 套接字。每个线程一个。连接它们。
  2. 在轮询线程上,还有 poll() 在您的 PAIR 套接字上。
  3. 当您想中断轮询线程时,从您的 PAIR 套接字向轮询线程的 PAIR 套接字发送消息。
  4. 然后将返回对 poll() 的调用。

请注意,虽然推荐使用此解决方案,但您需要更改部分代码。

    if (mySocketPoller->poll())
{
if (mySocketPoller->has_input(my_pair_socket))
{
// interrupted.
}
functionToCallWhenAMessageArrives();
}

关于c++ - 中断另一个线程对 zmqpp::poller::poll() 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32128770/

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