我正在创建一个任务调度程序,它调度一个处理程序在给定的持续时间并在计时器到期时执行它。在引擎盖下,它使用的是asio::d eadline_timer。根据 asio::io_service 的文档,处理程序将在运行 io_server::run() 函数的线程上下文中调用。虽然我的要求是在不同的线程上下文中调用处理程序。
我们如何才能实现它?确切地说,我的问题是,我们如何在不同的线程上下文中执行函数。例如,我在线程 1 中是当前的,但从线程 1 开始,我想从线程 2 上下文运行一些函数。
谢谢
一个常见的模式是
- 客户端线程请求计时器回调(绑定参数)并进入睡眠状态 计时器
- 过期,回调在计时器线程的上下文中执行
- 回调确实将命令发布到客户端队列中
- 客户端线程唤醒并执行命令
计时器线程与客户端实现(队列处理)完全分离。 客户端必须表现为合作,即不强调回调时间,而是立即返回。