是否可以在同一个boost :: asio :: deadline_timer上多次调用async_wait?来自升压的多个async_wait asio deadline_timer
我的意思做的是类似如下:
t->expires_from_now(delay);
t->async_wait(f1);
t->async_wait(f2);
这是否确保两个功能将被叫什么名字? 这是否确保这两个函数将按此顺序调用?
如果不是,有什么想法如何在定时器超时时连续调用f1和f2? (我不在乎是否在f1和f2的调用之间执行另一个处理程序)。
另一个问题:如果设置了两个定时器t1和t2,使t1的截止时间在t2的截止时间之前,我能确定与t1关联的处理程序将在与t2关联的处理程序之前被调用吗? (在这种情况下,对于上面的代码,我只会为f2创建一个第二个定时器,其延迟比为第一个定时器设置的延迟稍大)。
感谢
这是一个实现细节,但我认为第二个问题的第一点可能会有些不准确。 Boost.Asio在'timer_queue'中管理定时器操作,它们根据'Time_Traits :: less_than'排序。当反应堆从队列中删除准备好的计时器时,它将它们添加到'io_service'以进行延迟调用,它们应该按照时间顺序与系统时钟的分辨率无关。 –
感谢您的关注。您可以像“实现定义”一样阅读答案的一部分 - 我给出的示例可能不适用于boost的计时器实现,但它们可能适用于其他自定义实现。我转述了答案的那部分 –
听起来不错。处理程序的排序在['WaitableTimerService'](http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/WaitableTimerService.html)和['TimerService'](http ://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/TimerService.html)类型的要求。虽然['deadline_timer_service'](http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/deadline_timer_service.html)会按照时间顺序将它们排队,而与系统时钟的分辨率无关,不是必需的,并且定制服务可以以任何顺序安全地排队它们。 –