1

Microsoft 技术网站上的这篇文章提供了一个exe计算 Windows 机器的最小时间分辨率的文章——这应该是该机器上任何应用程序可用的最小“滴答”:

http://technet.microsoft.com/en-us/sysinternals/bb897568.aspx

在我当前的机器上运行这个应用程序的结果是 15.625 毫秒。我还对 Internet Explorer 进行了测试,并从 Date() javascript 函数中获得了完全相同的分辨率。

令人困惑的是,我针对 IE 运行的 SAME 测试为 Google 的 Chrome 浏览器(分辨率为 1 毫秒)和在 IE 中运行的 Flash 电影(1 毫秒)提供了更精细的分辨率。谁能解释任何应用程序如何获得比机器时钟更好的时钟分辨率?如果是这样,有什么方法可以在 Chrome 以外的浏览器中获得始终如一的更好分辨率(不使用闪存)?

下面的第一个答案引出了另外两个问题:

  1. 多媒体计时器如何获得系统时钟滴答之间的时间。我把系统时钟想象成一个指针滴答作响的模拟手表,每个滴答声为 15 毫秒。如何测量刻度之间的时间?
  2. 浏览器是否可以使用多媒体计时器,尤其是 Internet Explorer?我可以使用 C# 或 Javascript 访问一个,而无需将软件推送到用户的浏览器/机器吗?
4

3 回答 3

4

您可以使用多媒体计时器将时间缩短到 1 毫秒,使用 QueryPerformanceCounter 甚至可以进一步缩短。

另请参见GetLocalTime() API 时间分辨率

编辑:对新子问题的部分回答......

在 Windows 3 和 95 架构上,系统时间分辨率约为 15 毫秒。在 NT(和后续产品)上,您可以从硬件抽象层 (HAL) 获得更好的分辨率。Raymond Chen 撰写的QueryPerformanceCounter 计算的是经过的时间,而不是 CPU 周期文章,可能会给您一些额外的见解。

至于浏览器 - 我不知道它们用于计时器以及它们如何与操作系统交互。

于 2008-09-25T19:05:30.947 回答
1

查看 timeBeginPeriod API。来自 MSDN:“此功能会影响全局 Windows 设置。Windows 使用任何进程请求的最低值(即最高分辨率)。”

http://msdn.microsoft.com/en-us/library/ms713413(VS.85).aspx

(Markdown 不喜欢 URL 中的括号)

请参阅您发布的链接中引用的“Windows NT 高分辨率计时器内部”。

于 2008-09-25T19:37:06.207 回答
0

处理器上的APIC以总线速度运行并有一个定时器。他们可能正在使用它而不是系统时间。(或者他们可能只是给出了一堆不存在的精确度。)

本地 APIC 的此描述提到将其用作计时器。

(也可能是他们正在使用一些性能计数器。这实际上似乎更有可能,因为需要设备驱动程序来对 APIC 进行编程。)

于 2008-09-25T19:22:50.297 回答