To define a new timer, subclass this function and define []handle if needed ([]handle is not always required):
class MyTimer : public TimerHandler {
public:
MyTimer(MyAgentClass *a) : TimerHandler() { a_ = a; }
virtual double expire(Event *e);
protected:
MyAgentClass *a_;
};
Then define expire:
double
MyTimer::expire(Event *e)
{
// do the work
// return TIMER_HANDLED; // =\> do not reschedule timer
// return delay; // =\> reschedule timer after delay
}
Note that []expire can return either the flag TIMER_HANDLED or a
delay value, depending on the requirements for this timer.
Often MyTimer will be a friend of MyAgentClass, or []expire will only call a public function of MyAgentClass.
Timers are not directly accessible from the OTcl level, although users are free to establish method bindings if they so desire.