对绝对时间感兴趣,而不是衡量持续时间的方式。
Win32 API
C ++
Facebook的sdk键哈希太短
防止事件C#冒泡
谁可以解释FindResource / LoadResource / LockResource?
Wpf自定义窗口,Windows边缘resizefunction
CreateProcessWithlogonW,创build进程作为另一个用户在不同的桌面上,与浏览器失败
如何find正在做I / O的代码
Windows单链表(_SINGLE_LIST_ENTRY)
你会需要特殊的硬件。 即使Windows API报告毫秒,它也不完全准确,根据这个讨论:
大多数英特尔奔腾基地个人电脑(我不确定其他人)有一个计时器芯片主板上有一个1.19318166667MHz计数器。
计数器从N(默认N = 65535)减少到1,速率为1.19318166667MHz。 当计数器从1翻转到N(从不出现零)时,会产生系统计时器中断。 注意系统时间由此中断更新。
如果N = 65535,则产生系统定时器中断(1.19318166667 / 65535 * 1000000)= 18.2次/秒。 这相当于每54.9毫秒。
这种粒度是今天大多数PC使用的固有特性。
您将需要硬件来实现这种绝对精确度,例如GPS无线电时钟 。 您还需要编写设备驱动程序级别的软件,用户模式程序几乎不能将响应时间缩短到毫秒级。 一般来说,Windows并不是适合这种操作系统的。
你需要做的是将一天中的时间与一个偏移计数器的值相关联,并且随着计数器的频率,您可以在应用程序中随后快速计算绝对时间。
对于不使用电源管理的单核主机,使用RDTSC的稳定TSC将是最快的,但是您必须自己确定频率,通常是运行固定的5秒钟时间循环并测量差异。
HPET设备的创建是为了克服多核,超线程和电源管理导致可变时钟速率的TSC的不足之处。 HPET仅在现代硬件中可用,它们具有自己的计数器和可编程频率,并且必须与TSC类似地被读取。 成本更昂贵,但约500ns。
Windows提供了QueryPerformanceCounter和QueryPerformanceFrequency函数来处理这一切,它将自动选择APIC或HPET设备,并使用TSC插值。
GetSystemTime()
如果你想要的准确性,你应该检查NIST,国家标准与技术研究所 。 他们有软件可以让你从他们的服务器获得时间。 它具有较高的准确度和分辨率。 这也是GPS接收机使用的时间标准。
但是,由于网络流量和违规行为,您可能无法获得高频率的时间。
timeGetTime被设计用于媒体播放,因此它比GetTickCount()函数更精确。 它不是校准到时钟时间。
要使时钟精确到毫秒。 您必须获得时钟,并且timeGetTime或QueryPerformanceCounter尽可能接近相同的时间。 然后,您可以连续调用timeGetTime等,从已知的时钟时间获取已经过去的毫秒数。
请注意, timeGetTime每47天周转一次
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。