回 帖 发 新 帖 刷新版面

主题:昨天sleep,timer控件的延时问题已解决,先有2个TIMER控件的问题?请专家看看

附上延时函数
Public Sub delay(ByVal n As Single) '设计延时函数,n表示需要延时的秒数
  Dim tm1 As Single, tm2  As Single
  tm1 = Timer  '返回一个 Single,代表从午夜开始到现在经过的秒数。
  Do
    tm2 = Timer  '如果tm2<tm1,说明tm1恰好在午夜前,而tm2在午夜后,相差24小时
    If tm2 < tm1 Then tm2 = tm2 + 86400
    If tm2 - tm1 > n Then Exit Do
       DoEvents  'DoEvents 会将控制权传给操作系统。
  Loop
  End Sub 

我界面上用了2个TIMER控件
我第一个TIMER事件写了延时函数 半小时
我第二个TIMER事件写了延时函数 1小时
他们不可以同时运行,要顺序的,我晕了,怎么解决啊

回复列表 (共3个回复)

沙发

[quote]我第一个TIMER事件写了延时函数 半小时
我第二个TIMER事件写了延时函数 1小时
他们不可以同时运行,要顺序的[/quote]
什么意思?timer1先延时半个小时再让timer2延时1个小时,然后又是timer1延时半小时....
Private Sub Form_Load()
Timer1.Interval = 50   
Timer2.Interval = 50
Timer1.Enabled = True
End Sub

Private Sub timer1_timer()
'延时前先关闭timer2
Timer2.Enabled = False

'timer1里延时半小时     '测试时5秒
'Call delay(30 * 60)
Debug.Print "timer1 start", Timer
Call delay(5)
Debug.Print "timer1 end", Timer

'timer1延时结束后再开启timer2
Timer2.Enabled = True
Timer1.Enabled = False
End Sub

Private Sub Timer2_timer()
'延时前先关闭timer1
Timer1.Enabled = False
 
'timer2里延时1小时      '测试时8秒
'Call delay(60 * 60)
Debug.Print "timer2 start", Timer
Call delay(8)
Debug.Print "timer2 end", Timer
'延时结束后再开启Timer1
Timer1.Enabled = True
Timer2.Enabled = False
End Sub

在刚启动时会有点问题,本来在debug窗口里最先应该显示timer1 start的,但是显示的是timer2 start。之后就比较正常了。可以想办法把第一次的抛弃掉。

板凳

意思就是同时延时
timer1里的代码半小时执行一次
timer2里的代码1小时执行1次, 他们应该是不干扰

现在的问题是,timer1先执行了一次,延时半小时,然后timer2执行了1次,延时1小时,这样的话在timer2执行的时候 timer1里面不执行了,也就是说timer现在不是1小时执行1次了,

3 楼

我已经在另外一帖讨论过你这种方法的弊端了,并且还给了一个“正确”的方法给你,你非要这个有问题的方法。

我来回复

您尚未登录,请登录后再回复。点此登录或注册