Symbian Developer Library

SYMBIAN OS V6.1 EDITION FOR C++

[Index] [Glossary] [Previous] [Next]



Location: e32base.h
Link against: euser.lib

Class CHeartbeat

CHeartbeat

Support

Supported from 5.0

Description

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:

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.

Derivation

CActiveThe core class of the active object abstraction
CBaseBase class for all classes to be instantiated on the heap
CHeartbeatHeatbeat timer
CTimerBase class for a timer active object

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()


Construction and destruction


New()

static CHeartbeat* New(TInt aPriority);

Description

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.

Parameters

TInt aPriority

The priority of the active object. If timing is critical, it should be higher than that of all other active objects owned by the scheduler.

Return value

CHeartbeat*

Pointer to new CHeartbeat object. The object is initialised and added to the active scheduler. This value is NULL if insufficient memory was available.


NewL()

static CHeartbeat* NewL(TInt aPriority);

Description

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.

Parameters

TInt aPriority

The priority of the active object. If timing is critical, it should be higher than that of all other active objects owned by the scheduler.

Return value

CHeartbeat*

Pointer to new CHeartbeat object. The object is initialised and added to the active scheduler.

Leave codes

 

The function can leave if there is insufficient memory to create the timer.


~CHeartbeat()

~CHeartbeat();

Description

Frees resources prior to destruction.


CHeartbeat()

protected: CHeartbeat(TInt aPriority);

Description

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.

Parameters

TInt aPriority

The priority of the timer.

[Top]


Starting


Start()

void Start(TTimerLockSpec aLock,MBeating *aBeating);

Description

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.

Parameters

TTimerLockSpec aLock

The fraction of a second at which the timer completes.

MBeating *aBeating

Provides the Beat() and Synchronize() functions.