diff options
Diffstat (limited to 'utils/Timer.h')
-rw-r--r-- | utils/Timer.h | 68 |
1 files changed, 47 insertions, 21 deletions
diff --git a/utils/Timer.h b/utils/Timer.h index d361802..77c1b70 100644 --- a/utils/Timer.h +++ b/utils/Timer.h @@ -3,7 +3,7 @@ * * by Stephane Chatty * - * Copyright 1992 + * Copyright 1992-1993 * Centre d'Etudes de la Navigation Aerienne (CENA) * * timers @@ -25,48 +25,74 @@ template <class ITEM> class CcuListOf; #include "List.h" #endif -class CcuBaseTimer { -public: - enum timer_status { Active, Inactive }; +class CcuCoreTimer; + +class CcuTimerSet { +friend class CcuCoreTimer; private: -static CcuSignalHandler* TimeOutHandler; -static CcuBaseTimer* FirstActive; + CcuCoreTimer* FirstTimer; #ifndef CPLUS_BUG19 -static CcuListOf <CcuBaseTimer>* OtherActive; + CcuListOf <CcuCoreTimer> OtherTimers; #else -static CcuList* OtherActive; + CcuList OtherTimers; #endif + CcuCoreTimer* ExtractNextActive (); +public: +inline CcuTimerSet () : FirstTimer (0), OtherTimers () {} +inline ~CcuTimerSet () {} +}; -static void ClassInit (); -static void HandleSignal (int); -static void SetAlarm (Millisecond); -static void StopAlarm (); -static CcuBaseTimer* ExtractNextActive (); -static int IsInactive (CcuBaseTimer*); + +class CcuCoreTimer { +friend class CcuTimerSet; +public: + enum timer_status { Active, Inactive }; + +protected: +static int IsInactive (CcuCoreTimer*); + + CcuTimerSet* MySet; Millisecond NextDate; Millisecond Period; int PulsesLeft; - timer_status Status; + timer_status StatusFlag; + CcuCoreTimer (Millisecond, int, CcuTimerSet*); + ~CcuCoreTimer (); void Activate (); void Schedule (Millisecond); void Reschedule (); - -protected: +virtual void SetAlarm (Millisecond) = 0; +virtual void StopAlarm () = 0; virtual void Handle (Millisecond); -public: - CcuBaseTimer (Millisecond, int = -1); -virtual ~CcuBaseTimer (); +public: void ChangePeriod (Millisecond first); void Stop (); void Restart (); void Wait (); inline Millisecond GetPeriod () const { return Period; } inline int GetNbPulses () const { return PulsesLeft; } -inline timer_status GetStatus () const { return Status; } +inline timer_status GetStatus () const { return StatusFlag; } +static void Fire (CcuTimerSet*); +}; + +class CcuBaseTimer : public CcuCoreTimer { +private: +static CcuSignalHandler* TimeOutHandler; +static CcuTimerSet* TimerSet; +static void HandleSignal (int); +static void ClassInit (); + +protected: + void SetAlarm (Millisecond); + void StopAlarm (); + +public: + CcuBaseTimer (Millisecond, int = -1); + ~CcuBaseTimer (); }; class CcuTimer : public CcuBaseTimer { |