Inherits BaseModule.
Public Types | |
typedef void( | cleanup )(void *data) |
Public Member Functions | |
void | init (Timer *t) |
void | setTimer (unsigned int index, simtime_t when) |
unsigned int | setTimer (simtime_t when) |
void | cancelTimer (unsigned int index) |
float | remainingTimer (unsigned int index) |
void | setContextPointer (unsigned int index, void *data) |
void * | contextPointer (unsigned int index) |
void | setContextDestructor (unsigned int index, cleanup *) |
void | allocateTimers (unsigned int count) |
void | deleteTimer (unsigned int index) |
Protected Member Functions | |
void | checkExists (unsigned int index) |
virtual void | handleMessage (cMessage *msg) |
Handle self messages. | |
Protected Attributes | |
Timer * | timer |
std::map< unsigned int, cMessage * > * | timers |
std::map< unsigned int, cleanup * > * | destructors |
Definition at line 9 of file TimerCore.h.
void TimerCore::cancelTimer | ( | unsigned int | index | ) |
Cancel an existing timer set by setTimer() If the timer has not been set, or has already fires, this does nothing Must call initTimers() before using.
index | Timer to cancel. Must be between 0 and the value given to initTimers() |
Definition at line 58 of file TimerCore.cc.
Referenced by Timer::cancelTimer().
{
Enter_Method_Silent();
checkExists(index);
if ((*timers)[index]->isScheduled())
cancelEvent((*timers)[index]);
}
void * TimerCore::contextPointer | ( | unsigned int | index | ) |
Retreive a "context pointer" refering to some piece of opaque useful data
index | Timer number |
Definition at line 113 of file TimerCore.cc.
Referenced by Timer::contextPointer().
{
checkExists(index);
return (*timers)[index]->getContextPointer();
}
float TimerCore::remainingTimer | ( | unsigned int | index | ) |
Fires on expiration of a timer. Fires after a call to setTimer(). Subclasses should override this.
index | Timer number that fired. Will be between 0 and the value given to initTimers() |
Definition at line 66 of file TimerCore.cc.
Referenced by Timer::remainingTimer().
{ checkExists(index); if ((*timers)[index]->isScheduled()) return SIMTIME_DBL((*timers)[index]->getArrivalTime()-simTime()); else return -1; }
void TimerCore::setContextDestructor | ( | unsigned int | index, | |
cleanup * | c | |||
) |
Provide a destructor function for a "context pointer" such that we can do complete cleanup even if there are still timers remaining at the end of a simulation. Called on end of sim for still scheduled timers.
index | Timer number |
Definition at line 75 of file TimerCore.cc.
Referenced by Timer::setContextDestructor().
{ checkExists(index); (*destructors)[index] = c; }
void TimerCore::setContextPointer | ( | unsigned int | index, | |
void * | data | |||
) |
Set a "context pointer" refering to some piece of opaque useful data
index | Timer number | |
data | Opaque pointer. Never free'd or dereferenced |
Definition at line 103 of file TimerCore.cc.
Referenced by Timer::setContextPointer().
{ checkExists(index); (*timers)[index]->setContextPointer(data); }
void TimerCore::setTimer | ( | unsigned int | index, | |
simtime_t | when | |||
) |
Set a timer to fire at a point in the future. If the timer with that id has already been set then this discards the old information.
index | Timer number to set. | |
when | Time in seconds in the future to fire the timer |
Definition at line 37 of file TimerCore.cc.
Referenced by setTimer(), and Timer::setTimer().
{ Enter_Method_Silent(); cMessage *timer; if (timers->find(index)==timers->end()) { timer = new cMessage("timer"); timer->setKind(index); (*timers)[index] = timer; (*destructors)[index] = NULL; } else { timer = (*timers)[index]; if (timer->isScheduled()) cancelEvent(timer); } scheduleAt(simTime() + when, timer); }
unsigned int TimerCore::setTimer | ( | simtime_t | when | ) |
Set a timer to fire at a point in the future. Auto-generates a timer id that's guaranteed not to have been used by anyone else. If the timer with that id has already been set then this discards the old information.
when | Time in seconds in the future to fire the timer |
Definition at line 28 of file TimerCore.cc.
References setTimer().
{ unsigned int key = timers->size(); while (timers->find(key)!=timers->end()) key++; setTimer(key,when); return key; }