Location:
e32base.h
Link against: euser.lib
CHeartbeat
Supported from 5.0
Heatbeat timer. This class generates regular heartbeat events on a
fixed fraction of a second. It is more accurate than a CPeriodic
timer, because it provides a function to restore timer accuracy if it gets out
of synchronisation with the system clock.
The protected RunL()
function is called when the timer
completes. The RunL()
function in turn calls either the
MBeating::Beat()
or the MBeating::Synchronize()
functions — MBeating
is specified as a parameter to the
Start()
function used to start the heartbeat timer.
The relevant MBeating
function may not be called
immediately after the signal from the timer request has been generated, for the
following reasons:
the RunL()
of another active object may be running
at the time of the signal
other active objects may have a higher priority than the
CHeartbeat
If no heartbeat is missed, then the Beat()
function is
called.
If one or more heartbeats are missed then the
Synchronize()
function is called. It is important to bear in mind
that the machine might be switched off after a few beats of the heart, and then
Synchronize()
will be called several days later. It is therefore
essential that synchronisation is achieved as quickly as possible, rather than
trying to catch up a tick at a time. In the context of an analogue clock, for
instance, the clock should just redraw itself with the current time - rather
than moving the hands round in steps until the time is correct.
CHeartbeat
is an active object, derived from
CActive
(via CTimer
). You should be familiar with
CActive
in order to understand CHeartbeat
behaviour,
but not necessarily with CTimer
.
|
Defined in CHeartbeat
:
CHeartbeat()
, New()
, NewL()
, Start()
, ~CHeartbeat()
Inherited from CActive
:
Cancel()
,
Deque()
,
DoCancel()
,
EPriorityHigh
,
EPriorityIdle
,
EPriorityLow
,
EPriorityStandard
,
EPriorityUserInput
,
IsActive()
,
IsAdded()
,
Priority()
,
RunError()
,
RunL()
,
SetActive()
,
SetPriority()
,
TPriority
,
iStatus
Inherited from CBase
:
operator new()
Inherited from CTimer
:
After()
,
At()
,
ConstructL()
,
Inactivity()
,
Lock()
static CHeartbeat* New(TInt aPriority);
Allocate and construct a CHeartbeat
object — non-leaving. Specify a high priority so the callback
function is scheduled as soon as possible after the timer events
complete.
|
|
static CHeartbeat* NewL(TInt aPriority);
Allocates and constructs a CHeartbeat
object — leaving. Specify a high priority so the callback
function is scheduled as soon as possible after the timer events
complete.
|
|
|
protected: CHeartbeat(TInt aPriority);
Protected constructor with priority. Use this constructor to set the priority of the active object.
Classes derived from CHeartbeat
must define and
provide a constructor through which the priority of the active object can be
passed. Such a constructor can call CHeartbeat
's constructor in
its constructor initialisation list.
|
void Start(TTimerLockSpec aLock,MBeating *aBeating);
Starts generating heartbeat events. The event results in calls
to the Beat()
and Synchronize()
functions specified
by aBeating
.
The first event is generated on the first fraction of a second
corresponding to aLock
that occurs after Start()
has
returned; subsequent events are generated regularly thereafter at one second
intervals on the second fraction specified by aLock
.
The aBeating
mixin must be written by the user.
Most of the time, its Beat()
function is called which trivially
updates the tick count. Occasionally, synchronisation is lost, and the
Synchronize()
function is called instead: this must find out from
the system time how many ticks should have been counted, and update things
accordingly.
Once started, heartbeat events are generated until the
CHeartbeat
object is destroyed.
|