A periodic timer, CPeriodic
, invokes a function at
regular intervals. You must wrap the function to be called in a
TCallBack
.
First, we provide a callback function for the timer to call. The
callback function can be a static member, i.e. TInt X::Foo(TAny *)
or global, i.e. TInt Foo(TAny *)
. The TAny*
can point
to any object that we specify when we start the timer.
It is awkward to deal with TAny*
, and more convenient to
write handler code from a non-static member function, so here we code a static
function to invoke a non-static function DoTick()
as
follows:
TInt CPeriodicRunner::Tick(TAny* aObject)
{
// cast, and call non-static function
((CPeriodicRunner*)aObject)->DoTick();
return 1;
}
The next piece of code creates a CPeriodic
and sets it
off with one-second ticks. The callback is specified to call the static
Tick()
function, passing the this
pointer (which we
use in Tick()
to call DoTick()
).
void CPeriodicRunner::StartTimer()
{
const TInt tickInterval=1000000;
iPeriodic=CPeriodic::NewL(0); // neutral priority
iPeriodic->StartInMicroSeconds(tickInterval,tickInterval,TCallBack(Tick, this));
}