我需要一个准确的计时器来将Windows应用程序连接到一个实验室设备.
我使用System.Timers.Timer()来创建一个每10毫秒滴答一次的计时器,但这个时钟运行缓慢.例如,间隔为10毫秒的1000个刻度应该需要10个挂钟秒,但它实际上需要20个挂钟(在我的电脑上).我猜这是因为System.Timers.Timer()是一个间隔计时器,每次经过时都会重置.由于在定时器过去和重置之间总是需要一些时间(到另一个10毫秒),时钟将运行缓慢.如果间隔很大(几秒或几分钟),这可能很好,但是对于非常短的间隔是不可接受的.
Windows上是否有一个函数会在每次系统时钟跨越10毫秒(或其他)边界时触发一个过程?
这是一个简单的控制台应用程序
谢谢
规范
更新:System.Timers.Timer()对于小间隔非常不准确.
我写了一个简单的程序,计算10秒:
间隔= 1,计数= 10000,运行时间= 160秒,每间隔msec = 16
间隔= 10,计数= 1000,运行时间= 16秒,每间隔毫秒= 15
间隔= 100,计数= 100,运行时间= 11秒,每间隔msec = 110
间隔= 1000,计数= 10,运行时间= 10秒,每间隔msec = 1000
无论如何,似乎System.Timers.Timer()无法在15毫秒左右更快地打勾
间隔设置.
请注意,这些测试似乎都没有使用任何可测量的cpu时间,因此限制不是cpu,只是.net限制(bug?)
现在我认为我可以使用一个不准确的计时器,每15毫秒左右触发一个程序,并且例程可以获得准确的系统时间.有点奇怪,但……
我还发现了一个共享软件产品ZylTimer.NET,它声称是一个更精确的.net计时器(分辨率为1-2毫秒).这可能是我需要的.如果有一种产品,可能还有其他产品.
再次感谢.
您需要使用
high resolution timer,例如QueryPerformanceCounter