Windows 7 中的时钟如何工作?

2023-12-19

我在某处读过这个答案,但我不太明白:

我了解Windows每次curTimeIncrement都会增加时钟 (156001 100 纳秒) 与 curTimeAdjustment 的值 (156001 +-N)。但是,当使用 GetSystemTime 读取时钟时,例程会在 156001 纳秒 * 100 间隔内进行插值以 产生指定的精度?

有人可以尝试向我解释一下吗?

What is curTimeIncrement, curTimeAdjustmentWindows 如何做到这一点?

这对获取准确时间有什么影响?

这仅适用于 Windows 7 还是其他操作系统 Win8、Linux 等?


它指的是返回的值获取系统时间调整() https://msdn.microsoft.com/en-us/library/windows/desktop/ms724394%28v=vs.85%29.aspx在 Windows 上。它告诉您如何调整时钟以赶上或减慢以匹配实际时间。 “真实”时间是由美国国家标准技术研究所(NIST)等机构保存的时间,他们有一个原子钟,其精度远远高于机器内置的时钟。

机器中的实时时钟 (RTC) 的精度有限,这是保持硬件价格实惠的副作用,每个月往往会偏差几秒钟。因此,操作系统定期通过 Internet 联系时间服务器,time.windows.com 是 Windows 上的常见选择。它根据原子钟预言告诉它当前的实时时间。

RTC 的不准确并不是漂移的唯一原因,有时实时时间会被故意更改。添加一个闰秒使时钟与地球的真实自转重新同步。当前的一天(24 x 60 x 60 秒)有点太短,地球自转每世纪减慢约 1.5 毫秒,并且由于大风暴和地震而总体上不规则。插入的闰秒弥补了这一点。最近的一个添加于今年 6 月 30 日 23:59:60 UTC。 60 不是拼写错误:)

上一次发生在 2012 年 6 月 30 日。有点臭名昭著的是,闰秒的插入导致很多 Linux 服务器崩溃。谷歌“Linux 闰秒错误”以了解更多信息。

这通常是 GetSystemTimeAdjustment() 下的机制试图避免的,立即使用从时间服务器获取的值更改时间是非常危险的。软件通常有一个硬性假设,即时间会稳定地进行,否则就会出现错误。就像把时钟拨回后观察同一时间两次一样。或者由于闰秒插入而观察到像 23:59:60 UTC 这样的假时间。

所以事实并非如此,时钟在时钟滴答中断处每秒更新 64 次。或者换句话说,刻度之间的 1 / 64 = 0.015625,即 156250(纳秒*100 单位)。如果需要进行时钟调整,那么它不仅仅是添加 156250,而是稍微多一点或少一点。从而缓慢地将时钟重新同步到真实时间并避免扰乱软件。

这当然会对绘制时钟的软件产生令人不快的副作用。一个明显的方法是使用一秒计时器。但有时那不是一秒钟,也不是在进行时间调整时。然后奈奎斯特采样定理开始发挥作用,有时计时器滴答根本不会更新时钟,或者会跳过一秒钟。值得注意的是,这不是only之所以很难保持绘制的时钟准确,是因为计时器通知本身也总是延迟。软件的副作用是无法即刻执行。这实际上是更可能的麻烦根源,时钟调整只是锦上添花,更容易理解。

尴尬的问题,奈奎斯特先生告诉我们,你必须更频繁地采样,以消除不需要的混叠效应。因此,解决方法是将计时器设置为较小的间隔,例如 15 或 31 毫秒,足够短,以便用户不再观察到丢失的更新。

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

Windows 7 中的时钟如何工作? 的相关文章

  • 如何调用 LogonUser() 来获取启用了 UAC 的 Windows 服务中的非限制完整令牌?

    我正在 Windows Server 2012 上运行 WindowsService 它需要模拟域管理员用户 该用户也被添加到计算机上的本地管理员组 系统上启用了 UAC 并且使用 LogonType 为 LOGON32 LOGON INT
  • 如何将CString转换为整数和浮点数? [复制]

    这个问题在这里已经有答案了 我正在尝试转换CStringint 和 float 但无法找到任何 C 库函数来完成此操作 请帮忙 正确的UNICODE 符合规定的方式MFC如下 CString sInt T 10 int n ttoi sIn
  • 在新窗口中打开 SAS 程序

    目前 当您在 Windows 中双击 SAS 文件时 它将在您已打开的现有 SAS 会话中打开它 有没有办法让它在窗口中单击时会启动一个新的 SAS 窗口 据我所知 SAS 是一个所谓的 单实例 应用程序 因此它的默认行为是在现有会话中打开
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • Windows7上python3.5无法安装BeautifulSoup4

    我已经从下载了 beautifulsoup4 4 5 3 tar gzhttps www crummy com software BeautifulSoup bs4 download 4 5 https www crummy com sof
  • 如何从任何进程关闭 Windows 上的套接字(ipv4 和 ipv6)连接?

    如何在 Windows 上关闭 tcp v4 和 tcp v6 连接 我不想终止具有开放连接的整个进程 因为这显然会将其他人踢出该进程 我需要从一个单独的进程执行此操作 因此无法访问套接字句柄等 我正在使用 Windows API 来获取
  • 代码退出-1073741515 (0xc0000135)“未找到依赖的 dll”

    我正在尝试编写一个简单的程序 与 2019 年相比 Windows 10 64 位 调试 gt x64 遵循 将 Visual C 项目配置为面向 64 位平台 1 include
  • 确定用于映射网络驱动器的域和用户名

    使用带有 SP1 的 Windows 7 Enterprise 但我希望得到适用于 Windows XP 2003 2008 Vista 7 的通用答案 从命令提示符处 我执行net use命令将 Z 驱动器映射到另一台计算机上的共享 但我
  • 用于验证 IIS 设置的 Powershell 脚本

    是否可以使用 Power Shell 脚本获取 IIS 设置 我希望使用脚本获取 检查以下信息 检查 Windows 身份验证提供程序是否正确列出 协商 NTLM 检查是否启用了 Windows 身份验证 Windows 身份验证高级设置
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何使用命令行压缩文件?

    我想使用批处理文件命令 Windows XP 批处理文件 压缩目录 例如 如果我想解压缩一个文件意味着我可以使用jar xf file zip java bat 文件命令 就像我想要一个命令行批处理来压缩目录一样 如果您使用的是 Ubunt
  • 在 Cygwin 软件包列表中找不到 Openssl

    这里说的是https github com joyent node wiki Building node js on Cygwin Windows https github com joyent node wiki Building nod
  • 如何在 Flutter App 中按时间注销?

    如果用户在登录后对应用程序没有反应或不活动超过 5 分钟 我需要从应用程序中注销用户 该应用程序将转到主登录页面 我尝试实施给定的解决方案here https stackoverflow com questions 52602606 how
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • NodeJS Express Windows 最大连接数设置

    在哪里设置nodejs的最大连接数 用于使用express get 在 Windows 10 中 与linux中的最大文件 描述符 设置有关吗 有该设置的 Windows 版本吗 最好是在nodejs中进行设置 以便在迁移到unix时兼容
  • Windows 目录永远不会包含临时文件的非 ASCII 字符?

    在 Windows 上使用 MinGW 7 3 0 由于 Windows 限制 Hunspell 无法从包含非 ASCII 字符的位置加载字典文件 我已经尝试了所有方法 1 现在我将文件复制到没有 ASCII 字符的路径 然后再将其交给 H

随机推荐