Boost.Asio - 如何在其他线程的上下文中使deadline_timer失效?

时间:2015-03-16 05:51:05

标签: c++ boost-asio

我正在创建一个TaskScheduler,它在给定持续时间时调度处理程序,并在计时器到期时执行它。在引擎盖下,它使用asio :: deadline_timer。根据asio :: io_service的文档,将在运行io_server :: run()函数的线程上下文中调用该处理程序。虽然我的要求是在不同的线程上下文中调用处理程序。

我们怎样才能实现它?确切地说,我的问题是,我们如何在不同的线程上下文中执行函数。例如。我当前在Thread1中,但是从Thread1,我想从Thread2上下文运行一些函数。

谢谢

1 个答案:

答案 0 :(得分:0)

常见的模式是

  • 客户端线程请求定时器回调(绑定参数)并进入休眠状态
  • 计时器到期,回调在计时器线程的上下文中执行
  • 回调会将命令发布到客户端队列
  • 客户端线程唤醒并执行命令

计时器线程与客户端实现(队列处理)完全分离。客户必须表现得很合作。即不要强调回调时间,而是立即返回。