RTP Audio System  2.0.0
MultiTimerThread< Timers > Class Template Reference

Multi Timer Thread. More...

#include <multitimerthread.h>

Inheritance diagram for MultiTimerThread< Timers >:
Thread Synchronizable TimedThread AbstractMediaServer AdvancedAudioDecoder BandwidthManager RoundTripTimePinger RTCPAbstractServer RTCPSender RTPSender TrafficShaperSingleton

List of all members.

Classes

struct  TimerParameters

Public Member Functions

 MultiTimerThread (const char *name="MultiTimerThread", const cardinal flags=TF_CancelDeferred)
 ~MultiTimerThread ()
card64 getInterval (const cardinal timer)
void setInterval (const cardinal timer, const card64 usec, const card64 callLimit=0)
void setNextAction (const cardinal timer, const card64 usec=0, const card64 callLimit=1)
void setNextActionAbs (const cardinal timer, const card64 timeStamp=0, const card64 callLimit=1)
cardinal getTimerCorrection (const cardinal timer)
void setTimerCorrection (const cardinal timer, const cardinal maxCorrection=0)
void leaveCorrectionLoop (const cardinal timer)
void setFastStart (const cardinal timer, const bool on)
bool getFastStart (const cardinal timer) const
void cancel ()
void * stop ()

Protected Member Functions

virtual void timerEvent (const cardinal timer)=0

Private Member Functions

void run ()
bool isShuttingDown ()

Private Attributes

TimerParameters Parameters [Timers]
bool ParametersUpdated
bool Shutdown
bool LeaveCorrectionLoop [Timers]

Static Private Attributes

static const card64 UpdateResolution = 100000

Detailed Description

template<const cardinal Timers>
class MultiTimerThread< Timers >

Multi Timer Thread.

This abstract class realizes a timer thread with multiple timers, based on Thread. The user of this class has to implement timerEvent(). Inaccurate system timers are corrected by calling user's timerEvent() implementation multiple times if necessary. This feature can be modified by setTimerCorrection (Default is on at a maximum of 10 calls).

Author:
Thomas Dreibholz
Version:
1.0
See also:
Thread

Constructor & Destructor Documentation

template<const cardinal Timers>
MultiTimerThread< Timers >::MultiTimerThread ( const char *  name = "MultiTimerThread< Timers >",
const cardinal  flags = TF_CancelDeferred 
)

Constructor. A new multitimer thread with a given interval will be created but *not* started! To start the new thread, call start(). The interval gives the time for the interval in microseconds, the virtual function timerEvent() is called. The default timer correction is set to 10. See setTimerCorrection() for more information on timer correction. The first call of timerEvent() will be made immediately, if the fast start option is set (default). Otherwise it will be made after the given interval.

Parameters:
usecInterval in microseconds.
nameThread name.
flagsThread flags.
See also:
Thread::start
timerEvent
Thread::Thread
setTimerCorrection
setFastStart
template<const cardinal Timers>
MultiTimerThread< Timers >::~MultiTimerThread ( )

Destructor.


Member Function Documentation

template<const cardinal Timers>
void MultiTimerThread< Timers >::cancel ( ) [virtual]

Reimplementation of Thread's cancel() method.

See also:
Thread::cancel

Reimplemented from Thread.

template<const cardinal Timers>
bool MultiTimerThread< Timers >::getFastStart ( const cardinal  timer) const [inline]

Get fast start option: If false, the first call of timerEvent() will be made *after* the given interval; otherwise it will be made immediately.

Parameters:
timerTimer number.
Returns:
true, if option is set; false otherwise.
template<const cardinal Timers>
card64 MultiTimerThread< Timers >::getInterval ( const cardinal  timer) [inline]

Get timer interval.

Parameters:
timerTimer number.
Returns:
Interval in microseconds.
template<const cardinal Timers>
cardinal MultiTimerThread< Timers >::getTimerCorrection ( const cardinal  timer) [inline]

Get maximum correction value for inaccurate system timer.

Parameters:
timerTimer number.
Returns:
true, if activated; false if not.
See also:
setTimerCorrection
template<const cardinal Timers>
bool MultiTimerThread< Timers >::isShuttingDown ( ) [inline, private]
template<const cardinal Timers>
void MultiTimerThread< Timers >::leaveCorrectionLoop ( const cardinal  timer) [inline]

Leave timer correction loop: If the thread is in a timer correction loop, the loop will be finished after the current timerEvent() call returns.

Parameters:
timerTimer number.
template<const cardinal Timers>
void MultiTimerThread< Timers >::run ( ) [private, virtual]

The virtual run() method, which contains the thread's implementation. It has to be implemented by classes, which inherit Thread.

Implements Thread.

template<const cardinal Timers>
void MultiTimerThread< Timers >::setFastStart ( const cardinal  timer,
const bool  on 
) [inline]

Set fast start option: If false, the first call of timerEvent() will be made *after* the given interval; otherwise it will be made immediately. The default is true.

Parameters:
timerTimer number.
ontrue, to set option; false otherwise.
template<const cardinal Timers>
void MultiTimerThread< Timers >::setInterval ( const cardinal  timer,
const card64  usec,
const card64  callLimit = 0 
) [inline]

Set timer interval. Note, that the first timerEvent() call will be immediately, is FastStart mode is set, see also setFastStart(). For single shot timers, you probably have to call setFastStart(nr,0) first!

Parameters:
timerTimer number.
usecInterval in microseconds (0 to deactivate timer).
callLimitCall count limit (0 for infinite).
See also:
setFastStart
template<const cardinal Timers>
void MultiTimerThread< Timers >::setNextAction ( const cardinal  timer,
const card64  usec = 0,
const card64  callLimit = 1 
) [inline]

Like setInterval(), but disabling FastStart first. This method can be used e.g. for single shot timers.

Parameters:
timerTimer number.
usecTime to next invokation (0 = immediately).
callLimitCall count limit (0 for infinite, default: 1).
See also:
setInterval
template<const cardinal Timers>
void MultiTimerThread< Timers >::setNextActionAbs ( const cardinal  timer,
const card64  timeStamp = 0,
const card64  callLimit = 1 
) [inline]

Like setNextAction(), but the time stamp of the next invokation is given as absolute time (microseconds since January 01, 1970).

Parameters:
timerTimer number.
usecTime to next invokation (0 = immediately).
callLimitCall count limit (0 for infinite, default: 1).
See also:
setInterval
setNextAction
template<const cardinal Timers>
void MultiTimerThread< Timers >::setTimerCorrection ( const cardinal  timer,
const cardinal  maxCorrection = 0 
) [inline]

Set correction of inaccurate system timer to given value. This on will cause the timerEvent() function to be called a maximum of maxCorrection times, if the total number of calls is lower than the calculated number of times the function should have been called. If the number of correction calls is higher than maxCorrection, *no* correction will be done! Default is 0, which turns correction off.

Parameters:
timerTimer number.
oftrue to activate correction; false to deactivate.
template<const cardinal Timers>
void* MultiTimerThread< Timers >::stop ( ) [virtual]

Reimplementation of Thread's stop() method.

See also:
Thread::stop

Reimplemented from Thread.

Reimplemented in AbstractMediaServer, and RTCPAbstractServer.

template<const cardinal Timers>
virtual void MultiTimerThread< Timers >::timerEvent ( const cardinal  timer) [protected, pure virtual]

The virtual timerEvent() method, which contains the multitimer thread's implementation. It has to be implemented by classes, which inherit MultiTimerThread. This method is called regularly with the given interval.

Implemented in TimedThread.


Member Data Documentation

template<const cardinal Timers>
bool MultiTimerThread< Timers >::LeaveCorrectionLoop[Timers] [private]
template<const cardinal Timers>
TimerParameters MultiTimerThread< Timers >::Parameters[Timers] [private]
template<const cardinal Timers>
bool MultiTimerThread< Timers >::ParametersUpdated [private]
template<const cardinal Timers>
bool MultiTimerThread< Timers >::Shutdown [private]
template<const cardinal Timers>
const card64 MultiTimerThread< Timers >::UpdateResolution = 100000 [static, private]

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines