vb.net – 准确的Windows计时器? System.Timers.Timer()限制为15毫秒

我需要一个准确的计时器来将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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...