>600ms Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub Command1_Click() Print Timer Timer1.Enabled = True End SubPrivate Sub Form_Load() Timer1.Enabled = False Timer1.Interval = 300 End SubPrivate Sub Timer1_Timer() Print Timer Sleep (300) Print Timer 'Timer1.Enabled = False End Sub
借lz的帖子问个曾经有人问过的问题: 假设在timer有个死循环 那么在timer时间用完后 这个死循环会中断吗? Private Sub Form_load() Timer1.Interval=300 End Sub Private Sub Timer1_timer() Do While Run_Flag=True DoEvents Loop End sub
给段代码试验,所谓死循环仍可终止,似乎受DoEvents语句影响而交出控制权. Option Explicit Dim Run_Flag As Boolean Private Sub Form_load() Timer1.Interval = 300 End Sub Private Sub Timer1_timer() Print Run_Flag Do While Run_Flag = True DoEvents Loop Print Run_Flag Timer1.Enabled = False End Sub
如果去掉DoEvents会退出循环吗?
去掉DoEvents仍能退出循环。Option Explicit Dim Run_Flag As Boolean Private Sub Form_load() Timer1.Interval = 300 End Sub Private Sub Timer1_timer() Print Run_Flag Do While Run_Flag = True 'DoEvents Loop Print Run_Flag Timer1.Enabled = False End Sub
你仔细看SDK,肯定有事件触发方式的.一般来说有回调,发消息的方式.
我发现凌华的PCI-16p1r这块卡的SDK偏偏没有,一定要timer去读端口状态才行
不要一下就睡300毫秒, for i=1 to 100 doevents sleep 1 next i 这样即不卡,又实现了延时
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub Command1_Click()
Print Timer
Timer1.Enabled = True
End SubPrivate Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 300
End SubPrivate Sub Timer1_Timer()
Print Timer
Sleep (300)
Print Timer
'Timer1.Enabled = False
End Sub
比如,楼上的,还不如干脆让Timer1.Interval = 600好了,这样才便于精确控制Timer程序的运作。
只能通过Timer来捉取状态
而在捉取过程,有可能要在Timer中再加点延时来处理其它事情,我也遇到过.
假设在timer有个死循环 那么在timer时间用完后 这个死循环会中断吗?
Private Sub Form_load()
Timer1.Interval=300
End Sub
Private Sub Timer1_timer()
Do While Run_Flag=True
DoEvents
Loop
End sub
Option Explicit
Dim Run_Flag As Boolean
Private Sub Form_load()
Timer1.Interval = 300
End Sub
Private Sub Timer1_timer()
Print Run_Flag
Do While Run_Flag = True
DoEvents
Loop
Print Run_Flag
Timer1.Enabled = False
End Sub
Dim Run_Flag As Boolean
Private Sub Form_load()
Timer1.Interval = 300
End Sub
Private Sub Timer1_timer()
Print Run_Flag
Do While Run_Flag = True
'DoEvents
Loop
Print Run_Flag
Timer1.Enabled = False
End Sub
for i=1 to 100
doevents
sleep 1
next i
这样即不卡,又实现了延时