Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4,VB5,VB6,VBS
Expertise: beginner
Jul 17, 1999

Cross-midnight time measurements

Any time the behavior of your code depends on the Timer function you should take into account the (more or less) remote possibility that your code is executed just before midnight. Take for example the following code:


Sub Pause(seconds as Single)
    Dim initTime as Single
    initTime = Timer 
    Do: Loop Until Timer >= initTime + seconds
End Sub
If this code is executed at 23:59:59 (or even earlier, depending on the value of the seconds argument), the Do-Loop will never end, and the user will have to kill the program from the Task Manager. The worst facet of this problem is that the bug can manifest months or even years after you've installed the program, which would leave you clueless about its causes.

Here's the fix for the above routine:


Sub Pause(seconds as Single)
    Dim initTime As Single, currTime As String
    initTime = Timer 
    Do
        currTime = Timer
    Loop Until currTime >= initTime + seconds Or (currTime < initTime And _
        currTime > initTime + seconds - 86400)
End Sub
If you don't need the pause to be really precise, and you're satisfied with an integer number of seconds, you can also use this simpler approach:


Sub Pause(seconds as Single)
    Dim initTime as Date
    initTime = Now
    Do: Loop Until DateDiff("s", initTime, Now) >= seconds
End Sub
An even simpler way to insert a pause that work across midnite is by means of the Sleep API function. See the link below to learn how to use this function.
Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date