Overcome timer limitations
We have received a lot of feedback about the tip of hacking down to seconds. We plan to publish some of that feedback in the near future. But now, undeterred by the fact that some readers have taken us to task, we present this tip, submitted by reader Saurabh Kumar, that deals with timing large intervals.
A common complaint of VB programmers is the limitation of the built-in Timer control, which allows intervals only about as big as a minute. Here is a technique that I use very effectively to have intervals ranging from 1 second to as big as you wish. You can now make your software run scheduled code every 15 minutes, every 10 hours, every 2 months, whatever!
I have provided the code, which must be placed into the 'General' 'Declarations' procedure, below. You should set the interval of the Timer to 1000, so this code is executed every second.
Now just place all the code you wish to be executed repeatedly, in a procedure named 'DoIt'.
You are ready. Notice that at the end of the Timer event, this code will execute the 'DoIt' procedure every 5 minutes. You can change it easily to suit your requirement. In this line, you can use 'timeSeconds' for interval in seconds (<60), 'timeHours' for interval in hours (<24) etc.
I have also made a sample application to demonstrate how to use this code easily in your program. Use it to do automated tasks on your server, send mails, do unattended database maintenance jobs etc.
Private Sub Timer1_Timer() dim BigInterval as byte Static timeSeconds As Byte Static timeMinutes As Byte Static timeHours As Byte Static timeDays As Byte timeSeconds = timeSeconds + 1 If timeSeconds >= 60 Then timeSeconds = 0 timeMinutes = timeMinutes + 1 End If If timeMinutes >= 60 Then timeMinutes = 0 timeHours = timeHours + 1 End If If timeHours >= 24 Then timeHours = 0 timeDays = timeDays + 1 End If If timeDays >= 30 Then timeDays = 0 End If 'use the variable below to change it to your required interval. 'NOTE: seconds<60, minutes<60, hours<24, days<30 BigInterval=15 'remove comment from the line below to suit your unit of interval 'Seconds ' If timeSeconds Mod BigInterval = 0 And timeSeconds <> 0 Then DoIt 'Minutes If timeMinutes Mod BigInterval = 0 And timeMinutes <> 0 And timeSeconds = 0 Then DoIt 'Hours ' If timeHours Mod BigInterval = 0 And timeHours <> 0 And timeSeconds = 0 And timeMinutes=0 Then DoIt 'Days ' If timeDays Mod BigInterval = 0 And timeDays <> 0 And timeSeconds = 0 And timeMinutes=0 And timeHours=0 Then DoIt End Sub Private Sub DoIt 'Add all recurring events here msgbox "Job Executed at " & Time End Sub
Did you like this tip? Do you have one of your own? Drop us a line.
Advanced Visual Basic 6: Power Techniques for Everyday Programs
Author : Matthew Curland
Publisher : Addison Wesley
Published : Jul 2000
In Advanced Visual Basic 6, leading Visual Basic expert Matthew Curland demonstrates powerhouse techniques programmers can use to write high-performance, robust, and reusable VB code. Readers learn how to leverage the close relationships between VB, COM, and OLE Automation, extending the envelope of VB's capabilities and building high-quality, object-based systems.
This was first published in May 2001