[Click] Strange timer behavior
Eddie Kohler
kohler at cs.ucla.edu
Tue Mar 4 13:35:58 EST 2008
Roberto,
Remember that initialize() is called exactly once. If initialize() is called
before the system time adjustment then it will take a long time for _next to
catch up!
I don't see what's so hard to understand about this. If you just want to run
the timer every 10000ms use _timer.schedule_after_msec(10000).
Eddie
Roberto Riggio wrote:
> Eddie,
>
> ok in order to simply the problem I've increased the confusion. This is the
> run_timer method:
>
> void
> Blank::run_timer(Timer *)
> {
> click_chatter("Pruning...")
> _next += Timestamp::make_msec(10000);
> _timer.schedule_at(_next);
> }
>
> _next is set to Timestap::now() in the element's initialize method.
>
> R.
>
> ----- "Eddie Kohler" <kohler at cs.ucla.edu> wrote:
>> Roberto,
>>
>> What is "now"? Not Timestamp::now(). It must be some variable that
>> you are
>> maintaining.
>>
>> If you want the timer to run once, use
>>
>> schedule_at(Timestamp::now() + delay)
>>
>> or equivalently
>>
>> schedule_after(delay)
>>
>> If you want the timer to run 60 times, use
>>
>> now = _timer.expiry();
>> ...
>> schedule_at(now + delay)
>>
>> or
>>
>> reschedule_after(delay)
>>
>> Eddie
>>
>>
>> Roberto Riggio wrote:
>>> Eddie,
>>>
>>> I don't know if it is really a problem. I use schedule_at
>>> in order to schedule the timer at X. Then, in run_timer I do
>>> something like this:
>>>
>>> schedule_at(now + delay)
>>>
>>> now let's assume that I change the system clock while click is
>>> running moving it forward one hour.
>>>
>>> Then if delay is 1 min run_timer is executed
>>> 60 times right after the clock change is committed.
>>>
>>> Is this the expected behavior?
>>>
>>>
>>> ----- "Eddie Kohler" <kohler at cs.ucla.edu> wrote:
>>>> Roberto,
>>>>
>>>> I don't know exactly what the "problem" is here, which behavior do
>> you
>>>> not like?
>>>>
>>>> The meaning of "schedule_after" is "schedule at X past the current
>>>> time." The
>>>> meaning of "scheudle_at" is "schedule at the moment the system
>> clock
>>>> says X."
>>>> These methods are behaving correctly.
>>>>
>>>> Eddie
>>>>
>>>>
>>>> Roberto Riggio wrote:
>>>>> Hi,
>>>>>
>>>>> the problem is the following: if I use the schedule_at function
>>>>> in order to reschedule a timer I get the timer scheduled several
>>>>> times if i move the system clock forward.
>>>>>
>>>>> On the other hand if I use the schedule_after function this
>>>>> does not occur and the timer is scheduled only one even if I move
>>>>> the clock several years in the future.
>>>>>
>>>>> The problem is annoying because I'm using click over an embedded
>>>>> platform that forget the system date at each reboot (the default
>>>> date
>>>>> is Jan 2000).
>>>>>
>>>
>
>
More information about the click
mailing list