我用如下代码测试
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=
1
也就是说Timer2无法定时到1个毫秒
而且当设置
If t2 = 1 Then
Stop
End If
测试结果如下
……
t2=
123
t2=
124
t2=
125
t1=
2
说明定是定时不准
问题:如何在vb中精确定时到1ms?
希望各位大师能出出主意。。。
8 个解决方案
#1
timer不准的原因:
机器执行代码需要时间,执行其他程序会耽搁触发
不要用累加,在触发时直接调用系统时间会好些
机器执行代码需要时间,执行其他程序会耽搁触发
不要用累加,在触发时直接调用系统时间会好些
#2
我的是
t2=
69
t1=
1
也就是说要1秒内打印1000条记录,电脑不可能反应那么快吧;
另外,电脑配置不一样结果都不一样.
t2=
69
t1=
1
也就是说要1秒内打印1000条记录,电脑不可能反应那么快吧;
另外,电脑配置不一样结果都不一样.
#3
呵呵 谢谢各位
我主要是用timer定时器做精确定时,看来只有放弃了,不过我找到一个更好的方法
就是用 API 函数timeSetEvent实现比较精确的定时
我主要是用timer定时器做精确定时,看来只有放弃了,不过我找到一个更好的方法
就是用 API 函数timeSetEvent实现比较精确的定时
#4
Timer2.Interval = 1
1是0.001秒啊,这个电脑做不到的。
换个思路吧
1是0.001秒啊,这个电脑做不到的。
换个思路吧
#5
Timer计时器精度见MSDN:
使用 Timer 控件
Timer 控件响应时间的流逝。它们独立于用户,编程后可用来在一定的时间间隔执行操作。此控件的一个一般用处是检查系统时钟,判断是否该执行某项任务。对于其它后台处理, Timer 控件也非常有用。
每个 Timer 控件都有 Interval 属性,指定定时器事件之间的毫秒数。除非禁止此属性,否则定时器在大致相等的时间间隔不断接受事件(称作定时器事件会更贴切)。
在为 Timer 控件编程时应考虑对 Interval 属性的几条限制:
如果应用程序或其它应用程序正在进行对系统要求很高的操作─ 例如长循环、高强度的计算或者正在访问驱动器、网络或端口─ 则应用程序定时器事件的间隔可能比 Interval 属性指定的间隔长。
间隔的取值可在 0 到 64,767 之间(包括这两个数值),这意味着即使是最长的间隔也不比一分钟长多少(大约 64.8 秒)。
间隔并不一定十分准确。要保证间隔准确,应在需要时才让定时器检查系统时钟,而不在内部追踪积聚的时间。
系统每秒生成 18 个时钟信号─ 所以即使用毫秒衡量 Interval 属性,间隔实际的精确度不会超过 18 分之一秒。
使用 Timer 控件
Timer 控件响应时间的流逝。它们独立于用户,编程后可用来在一定的时间间隔执行操作。此控件的一个一般用处是检查系统时钟,判断是否该执行某项任务。对于其它后台处理, Timer 控件也非常有用。
每个 Timer 控件都有 Interval 属性,指定定时器事件之间的毫秒数。除非禁止此属性,否则定时器在大致相等的时间间隔不断接受事件(称作定时器事件会更贴切)。
在为 Timer 控件编程时应考虑对 Interval 属性的几条限制:
如果应用程序或其它应用程序正在进行对系统要求很高的操作─ 例如长循环、高强度的计算或者正在访问驱动器、网络或端口─ 则应用程序定时器事件的间隔可能比 Interval 属性指定的间隔长。
间隔的取值可在 0 到 64,767 之间(包括这两个数值),这意味着即使是最长的间隔也不比一分钟长多少(大约 64.8 秒)。
间隔并不一定十分准确。要保证间隔准确,应在需要时才让定时器检查系统时钟,而不在内部追踪积聚的时间。
系统每秒生成 18 个时钟信号─ 所以即使用毫秒衡量 Interval 属性,间隔实际的精确度不会超过 18 分之一秒。
#6
VB定时器的精度最高是:1/18s
#7
是的,执行代码慢了
#8
VB定时器的精度最高是:1/18s
#1
timer不准的原因:
机器执行代码需要时间,执行其他程序会耽搁触发
不要用累加,在触发时直接调用系统时间会好些
机器执行代码需要时间,执行其他程序会耽搁触发
不要用累加,在触发时直接调用系统时间会好些
#2
我的是
t2=
69
t1=
1
也就是说要1秒内打印1000条记录,电脑不可能反应那么快吧;
另外,电脑配置不一样结果都不一样.
t2=
69
t1=
1
也就是说要1秒内打印1000条记录,电脑不可能反应那么快吧;
另外,电脑配置不一样结果都不一样.
#3
呵呵 谢谢各位
我主要是用timer定时器做精确定时,看来只有放弃了,不过我找到一个更好的方法
就是用 API 函数timeSetEvent实现比较精确的定时
我主要是用timer定时器做精确定时,看来只有放弃了,不过我找到一个更好的方法
就是用 API 函数timeSetEvent实现比较精确的定时
#4
Timer2.Interval = 1
1是0.001秒啊,这个电脑做不到的。
换个思路吧
1是0.001秒啊,这个电脑做不到的。
换个思路吧
#5
Timer计时器精度见MSDN:
使用 Timer 控件
Timer 控件响应时间的流逝。它们独立于用户,编程后可用来在一定的时间间隔执行操作。此控件的一个一般用处是检查系统时钟,判断是否该执行某项任务。对于其它后台处理, Timer 控件也非常有用。
每个 Timer 控件都有 Interval 属性,指定定时器事件之间的毫秒数。除非禁止此属性,否则定时器在大致相等的时间间隔不断接受事件(称作定时器事件会更贴切)。
在为 Timer 控件编程时应考虑对 Interval 属性的几条限制:
如果应用程序或其它应用程序正在进行对系统要求很高的操作─ 例如长循环、高强度的计算或者正在访问驱动器、网络或端口─ 则应用程序定时器事件的间隔可能比 Interval 属性指定的间隔长。
间隔的取值可在 0 到 64,767 之间(包括这两个数值),这意味着即使是最长的间隔也不比一分钟长多少(大约 64.8 秒)。
间隔并不一定十分准确。要保证间隔准确,应在需要时才让定时器检查系统时钟,而不在内部追踪积聚的时间。
系统每秒生成 18 个时钟信号─ 所以即使用毫秒衡量 Interval 属性,间隔实际的精确度不会超过 18 分之一秒。
使用 Timer 控件
Timer 控件响应时间的流逝。它们独立于用户,编程后可用来在一定的时间间隔执行操作。此控件的一个一般用处是检查系统时钟,判断是否该执行某项任务。对于其它后台处理, Timer 控件也非常有用。
每个 Timer 控件都有 Interval 属性,指定定时器事件之间的毫秒数。除非禁止此属性,否则定时器在大致相等的时间间隔不断接受事件(称作定时器事件会更贴切)。
在为 Timer 控件编程时应考虑对 Interval 属性的几条限制:
如果应用程序或其它应用程序正在进行对系统要求很高的操作─ 例如长循环、高强度的计算或者正在访问驱动器、网络或端口─ 则应用程序定时器事件的间隔可能比 Interval 属性指定的间隔长。
间隔的取值可在 0 到 64,767 之间(包括这两个数值),这意味着即使是最长的间隔也不比一分钟长多少(大约 64.8 秒)。
间隔并不一定十分准确。要保证间隔准确,应在需要时才让定时器检查系统时钟,而不在内部追踪积聚的时间。
系统每秒生成 18 个时钟信号─ 所以即使用毫秒衡量 Interval 属性,间隔实际的精确度不会超过 18 分之一秒。
#6
VB定时器的精度最高是:1/18s
#7
是的,执行代码慢了
#8
VB定时器的精度最高是:1/18s