【问题标题】:How does any application (chrome, flash, etc) get a time resolution better than the system time resolution?任何应用程序(chrome、flash 等)如何获得比系统时间分辨率更好的时间分辨率?
【发布时间】:2008-09-25 19:02:50
【问题描述】:

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

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

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

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

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

  1. 多媒体定时器如何获取 系统时钟滴答之间的时间。一世 把系统时钟想象成一个 指针滴答作响的模拟手表, 每个刻度为 15 毫秒。时代如何 在刻度之间测量?
  2. 多媒体定时器是否可用于 浏览器,尤其是互联网 探险家?我可以用 C# 访问一个吗 或 Javascript 无需推送 软件到用户的 浏览器/机器?

【问题讨论】:

  • 它们可供每个使用它们的应用程序使用。阅读文档。
  • David - 如果有一个分辨率比 Date() 更好的 Javascript 计时器,则不清楚(如您所建议的)它是什么,因此问题

标签: javascript flash google-chrome timer


【解决方案1】:

您可以使用multimedia timers 将时间缩短到 1 毫秒,使用 QueryPerformanceCounter 可以进一步缩短。

另见GetLocalTime() API time resolution

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

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

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

【讨论】:

  • 有趣。这导致了其他问题:
  • 不幸的是,vista 之前的设置是全局的(例如,系统中的所有计时器都变得更高分辨率,这可能会导致问题);它还对电源使用造成了非常糟糕的影响(尽管我不知道这在多大程度上取决于操作系统)
【解决方案2】:

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

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

(Markdown 不喜欢 URL 中的括号)

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

【讨论】:

  • 在 URL 中,您可以安全地用 %28 替换开头括号,用 %29 替换结尾括号。这可以解决降价的烦恼。
【解决方案3】:

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

description of the Local APIC 提到将其用作计时器。

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

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 2015-01-17
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多