gpt4 book ai didi

c++ - 修改系统时钟时,boost::deadline_timer 可能会失败

转载 作者:可可西里 更新时间:2023-11-01 16:37:40 25 4
gpt4 key购买 nike

可以在以下位置阅读:

https://svn.boost.org/trac/boost/ticket/3504

如果系统时间被修改(例如,使用 date 命令,如果您的操作系统是 Linux)。

现在是否有使用 Boost 执行此操作的简单且适当的方法?我不想使用 deadline_timer::expires_from_now(),因为我可以验证它不如“手动”更新到期时间准确。

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

最佳答案

在 Boost 1.49+ 中,Boost.Asio提供 steady_timer .此计时器使用 chrono::steady_clock ,一个不受系统时钟变化影响的单调时钟。

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

关于c++ - 修改系统时钟时,boost::deadline_timer 可能会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com