mikekwok
asked on
Timer control's interval more than 65,535 milliseconds
I want to do somethiing repeatly ... I plan to use a timer control in the VB. However, the maximum, 65,535 milliseconds, is equivalent to just over 1 minute. That's mean I can do something repeatly within 1 mins. Would somebody tells me how can I set the interval more than 1 mins ?
Something like:
sub timer1_timer()
static tim_count as integer
if tim_Count = 10 then
tim_count = 0
timer1.interval = 0
else
tim_count = tim_count + 1
end if
end sub
sub timer1_timer()
static tim_count as integer
if tim_Count = 10 then
tim_count = 0
timer1.interval = 0
else
tim_count = tim_count + 1
end if
end sub
ASKER
Sorry The timer is not accurate enough ..... After I have set the value to a < 1000 . Would somebody pls help me ? Thanks.
ASKER
I want to use a timer that can input the time interval more than 1 hour.
You can use the wonderful function called DateDiff.
Here is a sample app I wrote to show how it works quite nicely. Create a new project and place three labels and a timer control on it. The first label will show the current time. The second label will show total elapsed time since the program started. The third label will show elapsed time since the last "event".
This type of scheme is not good for benchmarking apps in the millisecond range, but it works great for longer durations where that kind of accuracy doesn't matter.
The code is pretty self explanatory. Hope it helps...and here it is:
Dim eventInterval As Long
Dim lastEventTime As Date
Dim initialTime As Date
Private Sub Form_Load()
' Set this value to the number of seconds you want inbetween your events
' It is a Long, so the max value is...
' max val: 2,147,483,647 seconds
' or approx 35,791,394 minutes
' or approx 596,523 hours
' or approx 24,855 days
' or approx 68.10 years
eventInterval = 90
initialTime = Now()
lastEventTime = initialTime
Timer1.Interval = 250
End Sub
Private Sub Timer1_Timer()
Dim curTime As Date
Dim elapsed As Long
Dim elapsedSeconds As Long
Dim elapsedHours As Long
Dim elapsedMinutes As Long
Dim elapsedString As String
curTime = Now()
' update current time
Label1.Caption = Format(curTime, "Long Time")
' update total elapsed time
elapsed = DateDiff("s", initialTime, curTime)
' conversions to secs, mins and hrs...
elapsedSeconds = elapsed
elapsedHours = elapsedSeconds \ 3600
elapsedSeconds = elapsedSeconds - (elapsedHours * 3600)
elapsedMinutes = elapsedSeconds \ 60
elapsedSeconds = elapsedSeconds - (elapsedMinutes * 60)
elapsedString = Format(elapsedHours, "00") & ":" & _
Format(elapsedMinutes, "00") & ":" & Format(elapsedSeconds, "00")
Label2.Caption = elapsedString
' update elapsed time since last event
elapsed = DateDiff("s", lastEventTime, curTime)
' conversions to secs, mins and hrs...
elapsedSeconds = elapsed
elapsedHours = elapsedSeconds \ 3600
elapsedSeconds = elapsedSeconds - (elapsedHours * 3600)
elapsedMinutes = elapsedSeconds \ 60
elapsedSeconds = elapsedSeconds - (elapsedMinutes * 60)
elapsedString = Format(elapsedHours, "00") & ":" & _
Format(elapsedMinutes, "00") & ":" & Format(elapsedSeconds, "00")
Label3.Caption = elapsedString
If elapsed >= eventInterval Then
lastEventTime = curTime
' place a call to your "event" subroutine here
'
' <-----------------------
'
'
End If
End Sub
Here is a sample app I wrote to show how it works quite nicely. Create a new project and place three labels and a timer control on it. The first label will show the current time. The second label will show total elapsed time since the program started. The third label will show elapsed time since the last "event".
This type of scheme is not good for benchmarking apps in the millisecond range, but it works great for longer durations where that kind of accuracy doesn't matter.
The code is pretty self explanatory. Hope it helps...and here it is:
Dim eventInterval As Long
Dim lastEventTime As Date
Dim initialTime As Date
Private Sub Form_Load()
' Set this value to the number of seconds you want inbetween your events
' It is a Long, so the max value is...
' max val: 2,147,483,647 seconds
' or approx 35,791,394 minutes
' or approx 596,523 hours
' or approx 24,855 days
' or approx 68.10 years
eventInterval = 90
initialTime = Now()
lastEventTime = initialTime
Timer1.Interval = 250
End Sub
Private Sub Timer1_Timer()
Dim curTime As Date
Dim elapsed As Long
Dim elapsedSeconds As Long
Dim elapsedHours As Long
Dim elapsedMinutes As Long
Dim elapsedString As String
curTime = Now()
' update current time
Label1.Caption = Format(curTime, "Long Time")
' update total elapsed time
elapsed = DateDiff("s", initialTime, curTime)
' conversions to secs, mins and hrs...
elapsedSeconds = elapsed
elapsedHours = elapsedSeconds \ 3600
elapsedSeconds = elapsedSeconds - (elapsedHours * 3600)
elapsedMinutes = elapsedSeconds \ 60
elapsedSeconds = elapsedSeconds - (elapsedMinutes * 60)
elapsedString = Format(elapsedHours, "00") & ":" & _
Format(elapsedMinutes, "00") & ":" & Format(elapsedSeconds, "00")
Label2.Caption = elapsedString
' update elapsed time since last event
elapsed = DateDiff("s", lastEventTime, curTime)
' conversions to secs, mins and hrs...
elapsedSeconds = elapsed
elapsedHours = elapsedSeconds \ 3600
elapsedSeconds = elapsedSeconds - (elapsedHours * 3600)
elapsedMinutes = elapsedSeconds \ 60
elapsedSeconds = elapsedSeconds - (elapsedMinutes * 60)
elapsedString = Format(elapsedHours, "00") & ":" & _
Format(elapsedMinutes, "00") & ":" & Format(elapsedSeconds, "00")
Label3.Caption = elapsedString
If elapsed >= eventInterval Then
lastEventTime = curTime
' place a call to your "event" subroutine here
'
' <-----------------------
'
'
End If
End Sub
Instead of taking the datediff in sec you can take it in mins or hour depending on the interval that ur looking at.....
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Here are some links that provide a bit more info on Cimperiali's idea of using the API.
http://www.vbcodemagician.dk/tips/system_formlesstimer.htm
http://www.mentalis.org/apilist/SetTimer.shtml
http://www.mentalis.org/apilist/KillTimer.shtml
http://www.vbcodemagician.dk/tips/system_formlesstimer.htm
http://www.mentalis.org/apilist/SetTimer.shtml
http://www.mentalis.org/apilist/KillTimer.shtml
A simple way of doing what you want is this:
Private Sub Pause(Duration As Long)
Dim Current As Long
Current = Timer
Do Until Timer - Current >= Duration
DoEvents
Loop
End Sub
Private Sub Form_Load()
' will pause x milliseconds
Pause(x)
End Sub
Private Sub Pause(Duration As Long)
Dim Current As Long
Current = Timer
Do Until Timer - Current >= Duration
DoEvents
Loop
End Sub
Private Sub Form_Load()
' will pause x milliseconds
Pause(x)
End Sub
sorry, Pause(x) will pause x seconds :P
declare a variable a
in form load a=0
in timer event
if a<10 then
a = a+1
else
a = 0
' what u want to do
end if
in this way ur timer will behave 10*timer inbterval time
do post if any doubt