最近发现vb的定时器不准 
我用如下代码测试 Dim t1, t2 As Long 
Private Sub Form_Load() 
    Timer1.Interval = 1000 
    Timer2.Interval = 1 
    Timer1.Enabled = True 
    Timer2.Enabled = True 
End Sub Private Sub Timer1_Timer() 
    t1 = t1 + 1     If t2 = 1 Then 
    Stop 
    End If     Debug.Print "t1=" 
    Debug.Print t1 
End Sub Private Sub Timer2_Timer() 
    t2 = t2 + 1    Debug.Print "t2=" 
    Debug.Print t2 
End Sub 
俩个代码运行结果如下 
…… 
t2= 
59 
t2= 
60 
t2= 
61 
t1= 

也就是说Timer2无法定时到1个毫秒 
而且当设置 
    If t2 = 1 Then 
    Stop 
    End If 测试结果如下 …… 
t2= 
123 
t2= 
124 
t2= 
125 
t1= 

说明定是定时不准 问题:如何在vb中精确定时到1ms? 
    希望各位大师能出出主意

解决方案 »

  1.   

    timer不准的原因:
    机器执行代码需要时间,执行其他程序会耽搁触发不要用累加,在触发时直接调用系统时间会好些
      

  2.   

    呵呵 谢谢各位
    我主要是用timer定时器做精确定时,看来只有放弃了,不过我找到一个更好的方法
    就是用 API 函数timeSetEvent实现比较精确的定时
      

  3.   

    Timer2.Interval = 1 
    1是0.001秒啊,这个电脑做不到的。
    换个思路吧
      

  4.   

    Timer计时器精度见MSDN:
    使用 Timer 控件
    Timer 控件响应时间的流逝。它们独立于用户,编程后可用来在一定的时间间隔执行操作。此控件的一个一般用处是检查系统时钟,判断是否该执行某项任务。对于其它后台处理, Timer 控件也非常有用。
    每个 Timer 控件都有 Interval 属性,指定定时器事件之间的毫秒数。除非禁止此属性,否则定时器在大致相等的时间间隔不断接受事件(称作定时器事件会更贴切)。
    在为 Timer 控件编程时应考虑对 Interval 属性的几条限制: 
    如果应用程序或其它应用程序正在进行对系统要求很高的操作─ 例如长循环、高强度的计算或者正在访问驱动器、网络或端口─ 则应用程序定时器事件的间隔可能比 Interval 属性指定的间隔长。
    间隔的取值可在 0 到 64,767 之间(包括这两个数值),这意味着即使是最长的间隔也不比一分钟长多少(大约 64.8 秒)。
    间隔并不一定十分准确。要保证间隔准确,应在需要时才让定时器检查系统时钟,而不在内部追踪积聚的时间。
    系统每秒生成 18 个时钟信号─ 所以即使用毫秒衡量 Interval 属性,间隔实际的精确度不会超过 18 分之一秒。