任何应用程序(chrome,flash等)如何获得比系统时间分辨率更好的时间分辨率?
微软技术网站上的这篇文章提供了一个" exe",它将计算Windows机器的最小时间分辨率,这应该是该机器上任何应用程序可用的最小"刻度":
http://technet.microsoft.com/zh-cn/sysinternals/bb897568.aspx
在我当前的机器上运行此应用程序的结果是15.625毫秒。我还针对Internet Explorer运行了测试,并从Date()JavaScript函数获得了完全相同的分辨率。
令人困惑的是,我针对IE进行的SAME测试为Google的Chrome浏览器(分辨率为1ms)和在IE中运行的Flash电影提供了更高的分辨率。谁能解释任何应用程序如何获得比机器时钟更好的时钟分辨率?如果是这样,是否可以通过某种方法在除Chrome之外的其他浏览器中(而不使用Flash)获得更好的分辨率?
下面的第一个答案会导致另外两个问题:
- 多媒体计时器如何获取系统时钟滴答之间的时间。我可以想象系统时钟是一只带有刻度的指针的模拟手表,每个刻度为15ms。刻度之间的时间如何测量?
- 多媒体计时器可用于浏览器,尤其是Internet Explorer吗?我可以使用C#或者Javascipt访问一个软件而不必将软件推送到用户的浏览器/计算机上吗?
解决方案
使用多媒体计时器可以降低到1毫秒,而使用QueryPerformanceCounter则可以达到1毫秒。
另请参见GetLocalTime()API时间解析。
编辑:对新的子问题的部分答案...
在Windows 3和95体系结构上,系统时间分辨率约为15毫秒。在NT(和后续版本)上,我们可以从硬件抽象层(HAL)获得更好的分辨率。 QueryPerformanceCounter计算经过的时间,而不是Raymond Chen撰写的CPU周期文章,可能会给我们一些其他的见解。
至于浏览器,我不知道它们用于计时器以及它们如何与OS交互。
处理器上的APIC以总线速度运行并具有计时器。他们可能会使用该时间而不是系统时间。 (或者他们可能只是提供了一些不存在的精度。)
对本地APIC的描述提到将其用作计时器。
(也可能是他们正在使用一些性能计数器。实际上似乎更有可能,因为需要使用设备驱动程序来对APIC进行编程。)
查看timeBeginPeriod API。来自MSDN:"此功能会影响Windows的全局设置。Windows使用任何进程请求的最低值(即最高分辨率)。"
http://msdn.microsoft.com/zh-CN/library/ms713413(VS.85).aspx
(Markdown不喜欢URL中的括号)
请参阅从我们发布的链接引用的"内部Windows NT高分辨率计时器"。

