中断另一个线程对zmqpp::poller::poll()的调用
Interrupt a call to zmqpp::poller::poll() from another thread
我正在使用ZeroMQ的zmqpp c++绑定来构建PUB/SUB通信。
在订阅者端,有2个线程——mainThread
和pollingThread
。
pollingThread
有阻塞呼叫zmqpp::poller::poll(zmqpp::poller::wait_forever)
。
如何从mainThread
中中断/取消pollingThread
对poll()
的调用?
编辑1:我使用std::thread
,所以我不能中断线程。
EDIT2:这基本上是pollingThread
的功能。
void pollingThread()
{
while (threadCanRun())
{
// wait indefinitely for a new message
if (mySocketPoller->poll())
{
functionToCallWhenAMessageArrives();
}
}
}
在我看来,推荐的方法是依靠消息传递来处理这个问题。
这意味着:
- 创建一对INPROC pair套接字。每个线程一个。连接他们。
- 在轮询线程上,也在PAIR套接字上的
poll()
。 - 当你想中断轮询线程时,从你的PAIR套接字发送一个消息给轮询线程的PAIR套接字。
- 调用
poll()
将返回。
请注意,这个解决方案虽然是推荐的,但需要您更改代码位。
if (mySocketPoller->poll())
{
if (mySocketPoller->has_input(my_pair_socket))
{
// interrupted.
}
functionToCallWhenAMessageArrives();
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 以嵌套或递归方式(即在处理程序内)调用 asio io_service poll() 或 poll_one() 是否有效
- poll()系统在Linux中调用带有分段错误的核心转储
- poll()系统调用以及之后接收或发送数据的行为
- 中断另一个线程对zmqpp::poller::poll()的调用
- 在循环中调用boost io_service poll