【发布时间】:2014-04-06 02:42:18
【问题描述】:
我需要一个准确的计时器来将 Windows 应用程序连接到一台实验室设备。
我使用 System.Timers.Timer() 创建了一个每 10 毫秒计时一次的计时器,但是这个时钟运行缓慢。例如,间隔为 10 毫秒的 1000 个滴答应该需要 10 挂钟秒,但实际上需要 20 挂钟秒(在我的 PC 上)。我猜这是因为 System.Timers.Timer() 是一个间隔计时器,每次经过时都会重置。由于在计时器经过和重置(再过 10 毫秒)之间总是需要一些时间,因此时钟运行缓慢。如果间隔很大(秒或分钟),这可能很好,但对于非常短的间隔是不可接受的。
Windows 上是否有一个函数会在系统时钟每次超过 10 毫秒(或其他)边界时触发一个过程?
这是一个简单的控制台应用程序。
谢谢
标准
更新:System.Timers.Timer() 对于小间隔非常不准确。
我写了一个简单的程序,用几种方法计算 10 秒:
间隔=1,计数=10000,运行时间=160 秒,每间隔毫秒=16
间隔 = 10,计数 = 1000,运行时间 = 16 秒,每间隔毫秒 = 15
间隔 = 100,计数 = 100,运行时间 = 11 秒,每间隔毫秒 = 110
间隔 = 1000,计数 = 10,运行时间 = 10 秒,每间隔毫秒 = 1000
似乎 System.Timers.Timer() 的滴答速度不能超过 15 毫秒,不管怎样 间隔设置。
请注意,这些测试似乎都没有使用任何可测量的 CPU 时间,因此限制不是 CPU,只是 .net 限制(错误?)
现在我认为我可以忍受每 15 毫秒左右触发一个例程的不准确计时器,并且该例程获得准确的系统时间。有点奇怪,但是...
我还发现了一个共享软件产品 ZylTimer.NET,它声称是一个更准确的 .net 计时器(分辨率为 1-2 毫秒)。这可能是我需要的。如果有一种产品,那么很可能还有其他产品。
再次感谢。
【问题讨论】:
-
您应该说明您的实际规格,您需要的最小刻度间隔是多少,公差是多少?
标签: vb.net