C++ boost::修改系统时钟时,截止时间计时器可能会失败

C++ boost::修改系统时钟时,截止时间计时器可能会失败,c++,boost,timer,boost-asio,clock,C++,Boost,Timer,Boost Asio,Clock,可在以下网址阅读: 如果修改了系统时间(例如,如果您的操作系统是Linux,则使用date命令),则定期超时并使用DELADATE_timer::expires_at()实现的DELADATE_计时器(如中的示例)可能会失败 现在有没有一种简单合适的方法来执行这个操作,使用Boost?我不想使用deadline_timer::expires_from_now(),因为我可以验证它是否比“手动”更新到期时间准确 作为临时解决方案,我决定在设置新的expires_at值之前,计算now()和exp

可在以下网址阅读:

如果修改了系统时间(例如,如果您的操作系统是Linux,则使用date命令),则定期超时并使用DELADATE_timer::expires_at()实现的DELADATE_计时器(如中的示例)可能会失败

现在有没有一种简单合适的方法来执行这个操作,使用Boost?我不想使用deadline_timer::expires_from_now(),因为我可以验证它是否比“手动”更新到期时间准确

作为临时解决方案,我决定在设置新的expires_at值之前,计算now()和expires_at()之间的时间段。如果它是周期延迟的两倍以上,那么我例外地使用expires\u from\u now()与新的绝对时间重新同步

在Boost 1.49+中提供。此计时器使用不受系统时钟变化影响的单调时钟


如果您不能使用Boost 1.49+,那么检查计时器或时钟的变化是一个合理的替代解决方案。虽然这是一个实现细节,但是Boost.Asio可以限制在其反应器中等待事件的时间量,以便它可以定期检测系统时间的变化。例如,使用
epoll
的反应堆实现将最多等待5分钟。因此,在不强制中断反应器的情况下(例如在计时器上设置新的过期时间),在检测到系统时间变化之前,Boost.Asio最多需要5分钟。

临时解决方案,漂亮的双关语:)