不要用SLEEP感觉程序像死了一样 
谢了

解决方案 »

  1.   

    不死就有可能导致计时不准,timer可以,sleep加doevents也可以
      

  2.   

    dim tmEnd As DatetmEnd = Timer + 5Do Until Timer > tnEnd
        DoEvents
    Loop不过,上面的代码在跨午夜时可能挂起。要做些处理。
      

  3.   

    用这个API就不会死:timeSetEvent。精度也高! 
      

  4.   

    看来楼主的意思是挂起某任务3秒,但是这期间界面还要响应用户事件,是吧。
    很简单,把界面和你要挂起的部分分放在两个线程里。
    VB实现多线程有些困难,可以用VC来编程。
      

  5.   

    t=timerdo
      doevents
    loop timer-t<3
      

  6.   

    t=timer do 
      doevents 
    loop while timer-t <3 
      

  7.   

    下面这段应该能满足你要求,且不会有2楼跨午夜的问题    Dim TimeBegin As Date
        TimeBegin = Now()
        Do
            DoEvents
        Loop Until DateDiff("S", TimeBegin, Now()) > 3
        MsgBox "三秒过去了"
      

  8.   

    像7楼说的,不要把简单的问题复杂化了!在窗体上放一个 timer 控件,时间间隔设置为三秒,默认为禁止状态当满足一定的条件,把 timer 控件使能不就可以了。反正你要求的精度也不是很高。如果用 DoEvents 循环来延时的话,自己看看CPU占用率。
      

  9.   

    我一直都在使用SLEEP 不过这个看上去不错有谁可以注释下吗 
    Dim TimeBegin As Date
        TimeBegin = Now()
        Do
            DoEvents
        Loop Until DateDiff("S", TimeBegin, Now()) > 3
        MsgBox "三秒过去了"
      

  10.   

    给个用Timer控件的代码实例:
    Private Sub Command1_Click()
        Timer1.Enabled = True
    End SubPrivate Sub Form_Load()
        Timer1.Interval = 1000
        Timer1.Enabled = False
    End SubPrivate Sub Timer1_Timer()
        Static sum As Integer
        sum = sum + 1
        If sum = 1 Then
            'A Sub
        ElseIf sum = 3 Then
            'B Sub
            Timer1.Enabled = False
            sum = 0
        End If
    End Sub
      

  11.   

    Public Declare Function GetTickCount Lib "kernel32" () As Long
    Public Sub delay(dTime As Double)‘已秒为单位,延时10秒只需要将dTime设置为10即可
      Dim dStart As Double
      dStart = GetTickCount \ 1000
      Do While dStart > GetTickCount \ 1000 - dTime
        DoEvents
      Loop
    End Sub
    调用该过程就能达到延时作用。