paninaro
asked on
How do I suspend a timer ?
Is there any way to temporarily suspend a timer ? I'm writing a small automatic file back-up program (hopefully to run as a Tray Icon application) and would like to suspend the timer while the user is changing their back-up options (to prevent a back up going off while the user is changing things). At first I thought to set the interval property to 0 while the user is changing their options, but if I reset interval to it's original value afterwards then the timer starts from scratch again. Is there some way round this or am I barking up the wrong tree by trying to use the timer for this ?
Thanks
Matt Freake
Thanks
Matt Freake
Hi paninaro,
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if YourGlobalVarInEdit then
DoNothing
else
otherStuff;
end;
YourGlobalVarInEdit typ Boolean initialized False
By Begin of Usermanipulatuin set to true
on End to False
Other Solution is to disable the Timer if true
instead
donothing
Timer1.Enabled := False;
must be enabled after Usermanipiulation
meikl
procedure TForm1.Timer1Timer(Sender:
begin
if YourGlobalVarInEdit then
DoNothing
else
otherStuff;
end;
YourGlobalVarInEdit typ Boolean initialized False
By Begin of Usermanipulatuin set to true
on End to False
Other Solution is to disable the Timer if true
instead
donothing
Timer1.Enabled := False;
must be enabled after Usermanipiulation
meikl
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Madshi: Doesn't your solution effectively just toggle the enabled property?
Raymond,
nope... That would be a joke, wouldn't it???
Let's say we have a timer that fires every 10 seconds. Then you suspend the timer after the 12 second for 5 seconds, then the suspend has no effect in my timer routine. The next event fires after 10, 20, 30... seconds. If you would use the enabled property, the next event would fire after 10, 27, 37... seconds!
If the timer is suspended after the 17 second for 5 seconds, then the 20 second timer doesn't fire. But my component remembers that there's an event delay. So in the moment when you resume the timer, the event is fired at once. That means my component would fire at 10, 22, 32, 42... If you would use the enabled property, the timer would fire at 10, 32, 42...
You see the difference?
Matt,
please look at the examples I've given in this comment. Does my component react the way you want it to?
nope... That would be a joke, wouldn't it???
Let's say we have a timer that fires every 10 seconds. Then you suspend the timer after the 12 second for 5 seconds, then the suspend has no effect in my timer routine. The next event fires after 10, 20, 30... seconds. If you would use the enabled property, the next event would fire after 10, 27, 37... seconds!
If the timer is suspended after the 17 second for 5 seconds, then the 20 second timer doesn't fire. But my component remembers that there's an event delay. So in the moment when you resume the timer, the event is fired at once. That means my component would fire at 10, 22, 32, 42... If you would use the enabled property, the timer would fire at 10, 32, 42...
You see the difference?
Matt,
please look at the examples I've given in this comment. Does my component react the way you want it to?
ASKER
Thanks, I've just installed the component and it works fine. I have to admit to not thinking it all through properly in the first place and following a discussion with a colleague have realised that, in an ideal world, the component would reset itself to it's old pattern once it had dealt with an abnormal event (in your last example it would fire at 10, 22, 30, 40...). Is that an easy modification to your component ?
Either way, the points are yours, let me know.
Thanks
Matt
Either way, the points are yours, let me know.
Thanks
Matt
Hmmm. What if you suspend the timer at 17 for 15 seconds?
Do you want to have 10,32,32,40,50,... or 10,32,40,50,... ?
The first case is not so nice. In the second case one timer event would be lost...
Regards, Madshi.
Do you want to have 10,32,32,40,50,... or 10,32,40,50,... ?
The first case is not so nice. In the second case one timer event would be lost...
Regards, Madshi.
Hmm. If you still want me to modify the component, you've got to let me know how exactly (see my last comment). If you're satisfied with the current solution: fine... :-)
Regards, Madshi-
Regards, Madshi-
ASKER
That's OK, I've actually decided to write this particular application slightly differently. However I'm sure the timer will come in very useful with some other stuff I'm doing soon.
Many thanks
Matt
Many thanks
Matt
Cheers,
Raymond.