计时器的间隔 - 从整数到浮点数/双精度 - 德尔福

时间:2012-02-09 19:45:07

标签: delphi timer integer double intervals

有没有办法解决Ttimer的界限,以便它可以精确化?例如,使用1000毫秒而不是只有1000毫秒的整数。如果不是,我可以使用哪个组件代替哪个组件会给我更精确的间隔

2 个答案:

答案 0 :(得分:4)

您正试图以合理的准确度跟踪时间。但是,标准系统计时器不能用于此目的。系统计时器保证的所有内容都是 ,而不是,而不是指定的时间间隔。如果您在推送消息队列时迟到,可以延迟收到消息。很简单,系统计时器不是用作秒表而是试图这样做是不合适的。

相反,您需要使用可以通过调用QueryPerformanceCounter获得的高分辨率性能计数器。

如果您使用的是Delphi 2010或更高版本,则可以使用Diagnostics.TStopwatch,它为高性能计时器提供了非常方便的包装。

您仍然可以使用系统计时器为您的应用程序定期打勾或脉冲,但请确保使用高分辨率计时器跟踪时间。

说完所有这些之后,我不确定你是否能够实现你所希望的目标。如果你想保持合理准确的时间,那么我上面说的是真的。试图与在远程网络上的另一台机器上运行的代码保持锁步同步听起来对我来说非常棘手。

答案 1 :(得分:0)

1)TTimer类对于你的任务来说不够准确,期间! (然后,网站计时器也不会是)

2)如果你使用TimeBeginPeriod()API调用增加计时器分辨率,这会让你更接近,但仍然离得足够近

3)如果您每次根据恒定的开始时间调整TTimer间隔(并与PC时钟同步),您可以平均每个时间事件与PC时钟相比的设定毫秒数

4)我不知道TTimer类是否正确处理3)但是我有一个TTimer等效的

5)考虑到PC时钟漂移,您需要定期与NTP服务器同步PC时钟

6)我有一个系统可以将PC时钟保持在良好的机器上,持续时间为+/- 5毫秒(我每分钟调整一次)和分辨率为+/- 2毫秒的定时器因为机器没有超载(Windows不是实时操作系统)

7)我花了很长时间才达到这一点 - 这是你真正需要的,还是你提出了错误的问题?