sleep的延时将全部程序都挂起了, 在VB6这个函数还把其他可能在运行中的sub也一起停掉了~timegettime不会挂起程序而且非常精确, 延时的时候, 其他代码还可以运行, 但是缺点也很明显, 就是CPU占用太高~
我在VB6使用了timer函数, (Timer函数不是很精确计算时间但是CPU占用率很低~)timer里面需要延时200毫秒和5000毫秒, 延时期间还有其他sub或者function在运行, 所以不能使用sleep函数我使用了timegettime函数但是CPU占用率太高了~
请教各位老师, timer里面需要延时又不能使用sleep, 有什么方法可以延时但是CPU占用率相对较低呢?
private sub timer1_timer()
static c as long
c=(c+1) mod 10
select case c
case 1
...
case 5
...
case 8
...
end select
end sub
timegettime+sleep
代码
Public Function delay(T As Long)
Dim Savetime As Long
Savetime = timeGetTime '记下开始时的时间
While timeGetTime < Savetime + T '循环等待
Sleep (10)
DoEvents '转让控制权
Wend
End Function
timegettime cpu占用高的原因是他不停的在循环
sleep卡的原因是他不响应ui
结合起来就好了
这里sleep()里最好小于200,大于这个数还是会有点卡顿
最小可以为1,但是一般没必要,实际精度达不到1ms.可以结贴了
另外就是VB的定时器实在是很弱鸡,不够准确, 还容易被高CPU的操作耽误.
另外就是VB的定时器实在是很弱鸡,不够准确, 还容易被高CPU的操作耽误.
我觉得有点像异步回调,
但是有的时候运行状态不好保存啊,
又是一大堆代码.还要保证运行环境不变.
一行sleep有时候得用几百行来替代.
Begin VB.Form MainForm
Begin VB.Timer TimerTest
Enabled = -1 'True
Interval = 1000
Left = 0
Top = 0
End
Begin VB.Timer TimerSleep
Enabled = 0 'False
Left = 0
Top = 0
End
End
Dim done1 As Boolean
Sub sleep1(ms)
done1 = False
TimerSleep.Interval = ms
TimerSleep.Enabled = True
Do
DoEvents
Loop Until done1
End Sub
Private Sub TimerSleep_Timer()
TimerSleep.Interval = 0
TimerSleep.Enabled = False
done1 = True
End Sub
Private Sub TimerTest_Timer()
Debug.Print "Test1"
sleep1 400
Debug.Print "Test2"
sleep1 800
Debug.Print "Test3"
End Sub
另外就是VB的定时器实在是很弱鸡,不够准确, 还容易被高CPU的操作耽误.
我觉得有点像异步回调,
但是有的时候运行状态不好保存啊,
又是一大堆代码.还要保证运行环境不变.
一行sleep有时候得用几百行来替代.
是啊, 所以说有很多局限性, 毕竟VB不支持多线程. 你得像以前DOS下面编程那样去考虑这个问题(当然,没那么夸张)