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

Boost.Asio - How to expire deadline_timer in other thread's context?

本文关键字:deadline timer 过期 上下文 Asio 线程 其他 Boost      更新时间:2023-10-16

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

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

谢谢

一个常见的模式是

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

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