All pastes #468526 Raw Edit

Untitled

public text v1 · immutable
·published 2007-05-03 05:17 UTC
rendered paste body

'***
Private Declare Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function timeGetTime Lib "WinMM.dll" () As Long

Public Sub Wait(ByVal inMilliseconds As Long)
    Dim SleepTime As Long, TimeNow As Long
    Dim SleepTo As Long, SleepEnd As Long

    Const MaxSleep As Long = 100

    TimeNow = timeGetTime()
    SleepTime = inMilliseconds \ 10
    If (SleepTime > MaxSleep) Then SleepTime = MaxSleep
    SleepTo = TimeNow + inMilliseconds

    Do
        DoEvents
        TimeNow = timeGetTime()
        SleepEnd = SleepTo - TimeNow
        If (SleepEnd <= SleepTime) Then Exit Do
        Call Sleep(SleepTime)
    Loop

    If (SleepEnd > 0) Then Call Sleep(SleepEnd)
End Sub
'***

You can test it with something like this:

'***
Dim StartTime As Double, EndTime As Double

StartTime = Timer()
Call Wait(5000) ' Wait for 5 seconds
EndTime = Timer()

Debug.Print Format$(EndTime - StartTime, "0.000")
'***