src/Timer.cc
author terom
Thu, 04 Dec 2008 23:28:52 +0000
changeset 205 905028e58ed1
child 282 e0e4dfc3e528
permissions -rw-r--r--
implement a new tick-timer that doesn't suck
205
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     1
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     2
#include "Timer.hh"
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     3
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     4
Timer::Timer (TimeMS interval) :
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     5
    interval(interval), ticks(0), last_tick(0), enabled(false)
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     6
{
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     7
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     8
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
     9
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    10
TickCount Timer::get_ticks (void) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    11
    return ticks;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    12
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    13
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    14
void Timer::start (void) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    15
    last_tick = CL_System::get_time();
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    16
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    17
    enabled = true;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    18
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    19
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    20
void Timer::keep_alive (void) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    21
    // ignore if disabled
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    22
    if (!enabled)
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    23
        return;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    24
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    25
    // get current time
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    26
    TimeMS now = CL_System::get_time();
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    27
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    28
    // handle overflows
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    29
    if (last_tick > now)
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    30
        last_tick = now;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    31
    
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    32
    // is the tick over?
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    33
    if (last_tick + interval < now) {
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    34
        // the length of this tick
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    35
        TimeMS tick_length = now - last_tick;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    36
        
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    37
        // trigger our signal
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    38
        _sig_tick(tick_length);
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    39
        
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    40
        // update state
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    41
        last_tick = now;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    42
        ticks += tick_length / interval;
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    43
    }
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    44
}
905028e58ed1 implement a new tick-timer that doesn't suck
terom
parents:
diff changeset
    45