最近发现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=
1
也就是说Timer2无法定时到1个毫秒
而且当设置
If t2 = 1 Then
Stop
End If 测试结果如下 ……
t2=
123
t2=
124
t2=
125
t1=
2
说明定是定时不准 问题:如何在vb中精确定时到1ms?
希望各位大师能出出主意
我用如下代码测试 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?
希望各位大师能出出主意
解决方案 »
- 问个问题,郁闷一天了
- 能设置picturebox的透明度,SetLayeredWindowAttributes 怎么不行啊??
- 通过命令启动“资源管理器”时,左边的目录树我只想显示自己打开的目录,而不显示其他目录,如何实现
- ActiveReport报表可不可以做到一些控件不打印出来?但是要显示出来。在线等!
- 循环问题,各位高手帮助。
- 利用winsock的TCP协议方式通信,是否能通过路由器?
- 我想得到SQL中的某个数据库的所有表的结构,怎样做到呢?--先给10分看看--
- 为何提示数组下标越界??
- If TestVal Mod i = 0 Then 该句是什么意思
- vb excel导入access数据库问题,急,急,急!!!
- vb 做Dll 怎么用Winsock控件?
- 关于VB中禁止DATAGRID添加数据表中已有的项
机器执行代码需要时间,执行其他程序会耽搁触发不要用累加,在触发时直接调用系统时间会好些
我主要是用timer定时器做精确定时,看来只有放弃了,不过我找到一个更好的方法
就是用 API 函数timeSetEvent实现比较精确的定时
1是0.001秒啊,这个电脑做不到的。
换个思路吧
使用 Timer 控件
Timer 控件响应时间的流逝。它们独立于用户,编程后可用来在一定的时间间隔执行操作。此控件的一个一般用处是检查系统时钟,判断是否该执行某项任务。对于其它后台处理, Timer 控件也非常有用。
每个 Timer 控件都有 Interval 属性,指定定时器事件之间的毫秒数。除非禁止此属性,否则定时器在大致相等的时间间隔不断接受事件(称作定时器事件会更贴切)。
在为 Timer 控件编程时应考虑对 Interval 属性的几条限制:
如果应用程序或其它应用程序正在进行对系统要求很高的操作─ 例如长循环、高强度的计算或者正在访问驱动器、网络或端口─ 则应用程序定时器事件的间隔可能比 Interval 属性指定的间隔长。
间隔的取值可在 0 到 64,767 之间(包括这两个数值),这意味着即使是最长的间隔也不比一分钟长多少(大约 64.8 秒)。
间隔并不一定十分准确。要保证间隔准确,应在需要时才让定时器检查系统时钟,而不在内部追踪积聚的时间。
系统每秒生成 18 个时钟信号─ 所以即使用毫秒衡量 Interval 属性,间隔实际的精确度不会超过 18 分之一秒。