【问题标题】:How to giva a time accurate timer in Fire Monkey?如何在 Fire Monkey 中给出时间准确的计时器?
【发布时间】:2013-01-16 03:54:48
【问题描述】:

我必须在 10 秒内显示一个计时器,以进行体育比赛。我已经使用 TTimer 的 OnTimer 事件做到了这一点。间隔设置为 100。我的例程正确显示当前 min:sec.10th(例如:02:45.7),但如果我比较,我的计时器似乎每分钟松动约 4 秒。到正常时钟。

在 Delphi XE2(或 XE3)中有更好的方法来获得时间精度计时器吗?

【问题讨论】:

  • 你如何计算经过的时间?

标签: delphi timer delphi-xe2 firemonkey


【解决方案1】:

您可以使用计时器显示时钟的当前值,但使用不同的方法来计算经过的时间。

您必须知道,Windows 计时器时间不准确,即使您将其设置为每 100 毫秒运行一次,触发 OnTimer 事件可能需要更多时间,甚至可能会错过一些时间间隔如果由于某种原因在您的申请处理之前经过两次或更多次。

例如,您可以使用系统 high-resolution performance counter 以纳秒级精度跟踪时间。

您也可以使用 Delphi TStopwatch 类,它封装了系统调用,如果您的机器上没有高分辨率性能计数器,则回退到其他方法 (GetTickCount)。

还请查看How to Accurately Measure Elapsed Time Using High-Resolution Performance Counterdelphi.about.com 文章。

【讨论】:

  • 谢谢 非常有趣,但我的最后一个问题是:如果我必须显示倒数计时器,每次 OnTimer 事件触发时仍有很多计算要做,这需要时间吗?
  • @AlainV 有一些计算,是的,但在任何现代处理器中几乎不需要时间。如果您有兴趣更精确地了解,您还可以使用另一个高性能计数器来测量需要多少时间。我敢打赌它需要不到 0.1 毫秒。你有这么多吗?
  • 1ms 远没有问题,我需要精确显示第 10 秒,谢谢!
  • 有了高精度,您将获得比这更高的精度,因此您的下一个问题是决定如何将其舍入到仅十分之一秒,但仅此而已有一个很好的问题;)
猜你喜欢
  • 1970-01-01
  • 2016-02-17
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多