====== Starting timer ======
To start a timer, call from Rts2Block or its descendant (all device and service drivers, monitor - usually the main beast in RTS2 programme, which run method is called from C //main (int argc, char**argv)//):
addTimer (10, new Rts2Event (EVENT_MY_TIMER, this));
Where 10 is time in seconds for timer activations and EVENT_MY_TIMER is defined as
#define EVENT_MY_TIMER EVENT_LOCAL + 102
Of course try to keep numbers unique in the program, and do use EVENT_LOCAL prefix to declare them.
After timer time expires, //Rts2Object// specified as second argument to //Rts2Event// method postEvent will be called, with pointer to //Rts2Event// being send. To catch it, add (//virtual public//) method postEvent, which body is bellow:
void MyRts2ObjectDescendant::postEvent (Rts2Event *event)
{
switch (event->getType ())
{
case EVENT_MY_TIMER:
// do the work - even better, call method to do the work
...
// do not forget to requeu us (if needed), so we will be called again
addTimer (10, new Rts2Event (EVENT_MY_TIMER, this));
break;
}
// do not forget to call parent postEvent, which will delete event
// replace Parent with class from which you inherit - Rts2Device, Rts2Sensor,..
Parent::postEvent (event);
}
If you do not want to have event resheduled, remove addTimer call. To reshedule, you can also do:
case EVENT_MY_TIMER:
// do the work - even better, call method to do the work
...
// do not forget to requeu us (if needed), so we will be called again
addTimer (10, event);
// do not delete event pointer
return;
which will spare a few CPU cycles.