CTimer Class Reference

class CTimer : public CActive

Base class for a timer active object.

This is an active object that uses the asynchronous services provided by RTimer, to generate events. These events occur either at a specific time specified as a TTime, or after an interval specified in microseconds.

The RunL() virtual member function is called by the active scheduler after this event occurs.

To write a class derived from CTimer, first define and implement a constructor through which the priority of the CTimer active object can be specified. Then define and implement a suitable RunL() function to handle the completion of a timer request. This function is not defined by CTimer itself and must, therefore, be provided by the derived class.

This class is ultimately implemented in terms of the nanokernel tick, and therefore the granularity of the generated events is limited to the period of this timer. This is variant specific, but is usually 1 millisecond.

Note that the CPeriodic and CHeartbeat classes are derived from CTimer, and answer most timing needs.

CHeartbeat CPeriodic CHeartbeat

Inherits from

Constructor & Destructor Documentation

CTimer(TInt)

IMPORT_CCTimer(TIntaPriority)[protected]

Protected constructor with priority.

Use this constructor to set the priority of the active object.

Classes derived from CTimer must define and provide a constructor through which the priority of the active object can be passed. Such a constructor can call CTimer's constructor in its constructor initialisation list.

Parameters

TInt aPriorityThe priority of the timer.

~CTimer()

IMPORT_C~CTimer()

Destructor.

Frees resources prior to destruction. Specifically, it cancels any outstanding request and closes the RTimer handle.

Member Functions Documentation

After(TTimeIntervalMicroSeconds32)

IMPORT_C voidAfter(TTimeIntervalMicroSeconds32anInterval)

Requests an event after an interval.

This timer completes after the specified number of microseconds. The "after timer" counter stops during power-down. Therefore, a 5-second timer will complete late if the machine is turned off 2 seconds after the request is made.

Notes:

1. The CTimer's RunL() function will be run as soon as possible after the specified interval.

2. The RunL() may be delayed because the RunL() of another active object, with the deepest nesting-level active scheduler on the same thread, is running when the event occurs: this cannot be avoided, but can be minimised by making all RunL()s of short duration.

3. The RunL() may be delayed because other, higher-priority, active objects are scheduled instead. This can be avoided by making CTimers very high-priority.

panic
USER 87, if anInterval is negative. This is raised by the underlying RTimer.
panic
E32USER-CBase 51, if the active object has not been added to an active scheduler.
RTimer

Parameters

TTimeIntervalMicroSeconds32 anIntervalInterval after which event is to occur, in microseconds.

At(const TTime &)

IMPORT_C voidAt(const TTime &aTime)

Requests an event at a given local time.

This timer completes at the specified time - if the machine is in a turned off state at that time, the machine will be turned on again.

Notes:

1. The CTimer' RunL() function will be run as soon as possible after the specified system time.

2. The RunL() may be delayed because the RunL() of another active object, with the deepest nesting-level active scheduler on the same thread, is running when the event occurs: this cannot be avoided, but can be minimised by making all RunL()s of short duration.

3. The RunL() may be delayed because other, higher-priority, active objects are scheduled instead. This can be avoided by making CTimers very high-priority.

4. The TTime object should be set to the home time.

TTime::HomeTime

Parameters

const TTime & aTimeThe local time at which the event is to occur.

AtUTC(const TTime &)

IMPORT_C voidAtUTC(const TTime &aTimeInUTC)

Requests an event at a given UTC time.

This timer completes at the specified time - if the machine is in a turned off state at that time, the machine will be turned on again.

Notes:

1. The CTimer' RunL() function will be run as soon as possible after the specified system time.

2. The RunL() may be delayed because the RunL() of another active object, with the deepest nesting-level active scheduler on the same thread, is running when the event occurs: this cannot be avoided, but can be minimised by making all RunL()s of short duration.

3. The RunL() may be delayed because other, higher-priority, active objects are scheduled instead. This can be avoided by making CTimers very high-priority.

4. The TTime object should be set to the universal time.

TTime::UniversalTime

Parameters

const TTime & aTimeInUTC

ConstructL()

IMPORT_C voidConstructL()[protected]

Constructs a new asynchronous timer.

The function must be called before any timer requests (i.e. calls to RTimer::After() or RTimer::At()) can be made.

Since it is protected, it cannot be called directly by clients of CTimer derived classes. Typically, a derived class makes a base call to this function in the second phase of two-phase construction; i.e. the derived class defines and implements its own ConstructL() function within which it makes a base call to CTimer::ConstructL().

DoCancel()

IMPORT_C voidDoCancel()[protected, virtual]

Implements cancellation of an outstanding request.

This function is called as part of the active object's Cancel().

It must call the appropriate cancel function offered by the active object's asynchronous service provider. The asynchronous service provider's cancel is expected to act immediately.

DoCancel() must not wait for event completion; this is handled by Cancel().

CActive::Cancel

HighRes(TTimeIntervalMicroSeconds32)

IMPORT_C voidHighRes(TTimeIntervalMicroSeconds32aInterval)

Requests an event after the specified interval to a resolution of 1ms. The "HighRes timer" counter stops during power-down (the same as "after timer").

panic
USER 87, if anInterval is negative. This is raised by the underlying RTimer.
panic
KERN-EXEC 15, if this function is called while a request for a timer event is still outstanding.

Parameters

TTimeIntervalMicroSeconds32 aIntervalThe time interval, in microseconds, after which an event is to occur.

Inactivity(TTimeIntervalSeconds)

IMPORT_C voidInactivity(TTimeIntervalSecondsaSeconds)

Requests an event if no activity occurs within the specified interval.

Parameters

TTimeIntervalSeconds aSecondsThe time interval.

Lock(TTimerLockSpec)

IMPORT_C voidLock(TTimerLockSpecaLock)

Requests an event on a specified second fraction.

Note that the RunL() function is run exactly on the specified second fraction.

Parameters

TTimerLockSpec aLockThe fraction of a second at which the timer completes.

Member Data Documentation

RTimer iTimer

RTimer iTimer[private]