VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 2418|回复: 8

[求助] 利用Do....Loop循环延时的问题,请大家帮忙

[复制链接]
发表于 2016-2-29 11:01:16 | 显示全部楼层 |阅读模式
Option Explicit

Private Sub Command1_Click()
Dim dtStartTm As Single

dtStartTm = Timer
Do While (Timer - dtStartTm) < 10
    DoEvents
    Label1.Caption = (Timer - dtStartTm)
Loop
End Sub

Private Sub Command2_Click()
Dim dtStartTm As Single

dtStartTm = Timer
Do While (Timer - dtStartTm) < 10
    DoEvents
    Label2.Caption = (Timer - dtStartTm)
Loop
End Sub


两个延时程序,打开时,相互干扰。Command1先开,Command2后开,Command2打开后,Command1的Do.........Loop过程就暂停运行了。该怎么解决呢?
发表于 2016-3-1 09:17:09 | 显示全部楼层
Option Explicit

Private dtStartTm2 As Single
Private blnTimer2Flag As Boolean

Private Sub Form_Load()
   blnTimer2Flag = False
End Sub

Private Sub Command1_Click()
   Dim dtStartTm As Single
   
   dtStartTm = Timer
   Do While (Timer - dtStartTm) < 10
       DoEvents
       Label1.Caption = (Timer - dtStartTm)
      
       If blnTimer2Flag Then
         Label2.Caption = (Timer - dtStartTm2)
       End If
   Loop
End Sub

Private Sub Command2_Click()
   dtStartTm2 = Timer
   blnTimer2Flag = True
End Sub

点评

谢谢  发表于 2016-3-1 10:12
谢谢  发表于 2016-3-1 10:12
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 10:34:53 | 显示全部楼层
LionCSQ 发表于 2016-3-1 09:17
Option Explicit

Private dtStartTm2 As Single

但是这样Command2的过程就没有延时作用了。我的想法是两个过程都能延时,延时时间到了之后,再执行后面的程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 10:39:47 | 显示全部楼层
Option Explicit

Private Sub Command1_Click()
Dim dtStartTm As Single

dtStartTm = Timer
Do While (Timer - dtStartTm) < 10
    DoEvents
    Label1.Caption = (Timer - dtStartTm)
Loop

MsgBox "Command1 已延时10秒!"
End Sub

Private Sub Command2_Click()
Dim dtStartTm As Single

dtStartTm = Timer
Do While (Timer - dtStartTm) < 10
    DoEvents
    Label2.Caption = (Timer - dtStartTm)
Loop

MsgBox "Command2 已延时10秒!"
End Sub

像这样,每个过程都延时一段时间。是不是Do....Loop只能有一个占用CPU?两个Do....Loop过程不能同时运行呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 10:48:51 | 显示全部楼层
本帖最后由 yqlh_20 于 2016-3-1 10:51 编辑

Option Explicit

Private Sub Command1_Click()
Dim dtStartTm As Single

dtStartTm = Timer
aaa:
If (Timer - dtStartTm) < 10 Then
    DoEvents
    Label1.Caption = (Timer - dtStartTm)
    GoTo aaa
End If

MsgBox "Command1 已延时10秒!"
End Sub

Private Sub Command2_Click()
Dim dtStartTm As Single

dtStartTm = Timer
Do While (Timer - dtStartTm) < 10
    DoEvents
    Label2.Caption = (Timer - dtStartTm)
Loop

MsgBox "Command2 已延时10秒!"
End Sub

改成用if来判断延时,也是同样的问题。后一个启动的延时过程会阻止先启动的延时过程的运行,等后启动的延时过程运行结束,先启动的延时过程才继续运行。循环时占用CPU,但Doevents释放了控制权还是不行,无法让两个循环过程同时运行。
回复 支持 反对

使用道具 举报

发表于 2016-3-1 11:45:38 | 显示全部楼层
因为vb6只有1个线程
两段代码无法同时执行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 13:32:43 | 显示全部楼层
那怎么才能实现这样的功能呢,要多线程?这个我还不会啊
回复 支持 反对

使用道具 举报

发表于 2016-3-2 00:04:37 | 显示全部楼层
用定时器试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-7 10:30:50 | 显示全部楼层
hid 发表于 2016-3-2 00:04
用定时器试试

定时器可以,只要不 使用循环就没问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-5 11:35

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表