修改系统时钟时 boost::deadline_timer 可能会失败

2024-01-08

可以在以下位置阅读:

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

一个定期超时的deadline_timer,它是使用deadline_timer::expires_at() 实现的(就像中的示例)升压定时器教程,第三个示例 http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/tutorial/tuttimer3/src.html如果修改系统时间(例如,如果您的操作系统是 Linux,则使用 date 命令),则可能会失败。

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

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


在 Boost 1.49+ 中,Boost.Asio http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/history.html提供steady_timer http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/steady_timer.html。该定时器使用chrono::steady_clock http://www.boost.org/doc/libs/1_53_0/doc/html/chrono/users_guide.html#chrono.users_guide.tutorial.clocks,一个不受系统时钟变化影响的单调时钟。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修改系统时钟时 boost::deadline_timer 可能会失败 的相关文章

随机推荐

  • 停止 NSApplication 主事件循环

    我有一个由以下内容组成的应用程序 m file import
  • Java:删除点之后的所有字符

    我有一个简短的问题 我得到以下代码 String chapterNumber 14 2 1 我怎样才能从我的 chapterNumber 中获得如下所示的字符串 String mainChapterNumber 14 Edit 我想要 in
  • 删除 API post 调用的 csrf 保护

    我想从我的 Express 3 0 应用程序中删除 csrf 因为我在那里不需要它 我使用 oauth 来验证客户端 使用express csrf 时 中间件是否将API URL列入白名单 您可以通过两种方式做到这一点 1 创建一个自己的小
  • 服务器不读取客户端消息

    我再次需要套接字编程方面的帮助 现在 我想在使用命令单击按钮后将文本字段的值写入 Linux 中的远程服务器日志文件 echo textfieldValue gt gt filename 我在 Server java 中创建了两个线程 线程
  • 使用 Deno 编译时如何使用 lib.dom.d.ts 中的类型?

    我使用 Deno 编译一些 TypeScript 然后将其作为网页的一部分提供 以便它在浏览器端运行 我正在尝试在客户端使用画布元素 为此我需要类似的类型CanvasRenderingContext2D or CanvasGradient
  • BigQuery SQL:- 识别字符串中一行中的相同数字

    我想使用 SQL Bigquery 确定字符串何时连续出现 4 次以上相同的数字 例子 AAAAAB true BBBBAA false 111111 true 01010101010101 false 到目前为止 我已经尝试过使用正则表达
  • PHP聊天客户端

    我需要在 php js ajax 中创建一个聊天应用程序 需要将其集成到一个网站中 其中遇到的问题是创建一个聊天窗口 该窗口在浏览网站中的不同页面时需要保持不变 如果有人能提出更好的方法 我将不胜感激 提前致谢 至于实际的聊天应用程序 使用
  • 在 Powershell 中导入 CSV ,每 10 行分成多个文件

    我是 powershell 编码新手 我想做的是导入行数未知的 CSV 文件 然后每 10 行将其拆分为一个新的 CSV 文件 例如 如果我输入 97 行的 CSV 文件 我期望 9 个 10 行的文件和 1 个 7 行的文件 我尝试了以下
  • 浮点运算稳定吗? [复制]

    这个问题在这里已经有答案了 我知道浮点数有精度 精度后面的数字不可靠 但如果用于计算数字的方程相同怎么办 我可以假设结果也会相同吗 例如我们有两个浮点数x and y 我们可以假设结果吗x y机器1的结果和机器2的结果完全一样吗 IE 比较
  • 使用 NSOpenPanel 限制对某些文件夹的访问

    我使用 NSOpenPanel 允许用户选择一个文件夹来保存文档 我想限制它们可以保存到哪个文件夹 就层次结构而言 本质上 我想阻止他们选择上面的任何文件夹 用户 用户名 所以文件夹 用户 用户名 猫 可以接受 但是 用户 用户名 应用程序
  • DataGridView 单击事件并不总是触发

    我有一个DataGridView Its Cell Content Click每次我选择一个单元格时都不会触发 它确实会触发 但不是每次点击时都会触发 我想获取字符串变量 selected 中选定单元格的内容 这是我正在做的事情 priva
  • 在 Google Sheets 电子表格中按名称对工作表进行排序的脚本

    我使用 Google Sheets 电子表格来管理我正在处理的文件 我在任何给定时间都有大约 60 70 个文件 每个文件都有一个唯一的文件编号 每个文件在我的电子表格中都由一个以其文件号命名的唯一工作表表示 文件编号符合以下格式 例如 5
  • 配置文件的 Module.exports 与纯 json

    我看到有多种在 Node js 中创建配置文件的方法 一种在 js 文件中使用 module exports 一种仅使用纯 json 对象 config1 js module exports config 1 value 1 config
  • 使用 NetBeans IDE 在 Java DB 中创建自动增量键

    我来自 MySQL 世界 请帮忙 是否可以从 JavaDB 中的 NetBeans IDE 创建自动增量键 您使用一些更高级的数据库客户端吗 Thanks 这可能会帮助您 CREATE TABLE custinf CUST ID INT n
  • Azure函数:system.private.corelib:执行函数时出现异常

    我正在编写一个用于 PDF 转换的 Azure 函数 它依赖于 DataLogics PDF 转换和用于密码生成的 Nuget 包 mlkpwgen 功能有 using System IO using Microsoft AspNetCor
  • boost绑定类函数指针

    class Foo double f1 int x std string s1 double f2 int x SomeClass s2 我希望能够绑定 Foo f1 的 s1 而无需在 essense 中创建 foo 实例 typedef
  • 压缩或使用覆盖功能时如何在Jimp中保留EXIF数据?

    我尝试使用Jimp作为压缩上传到我的服务器的图像的库 但是 即使图像在我的计算机中旋转 当我将其上传到 jimp 时 我猜它不会处理 exif 方向数据并在压缩后保存未旋转的图片 image exifRotate 不过我在jimp里找到了这
  • 在本机反应中需要类('com.google.android.gms.location.FusedLocationProviderClient'的声明)

    这早些时候工作得很好 可能的未处理的 Promise 拒绝 id 0 错误 调用本机方法时遇到异常 在模块 ExpoLocation 上执行导出方法 getLastKnownPositionAsync 时发生异常 找到接口 com goog
  • Javascript 中相当于 Python 字典 get 方法的是什么

    Python 的字典 get 方法让我可以指定键不存在时应返回的内容 对于我当前的情况 我想要返回一本字典 我如何在 JavaScript 中执行此操作 没有与 python 字典 get 方法等效的 javascript 如果你自己编写它
  • 修改系统时钟时 boost::deadline_timer 可能会失败

    可以在以下位置阅读 https svn boost org trac boost ticket 3504 https svn boost org trac boost ticket 3504 一个定期超时的deadline timer 它是