/* * CENA C++ Utilities * * by Stephane Chatty * * Copyright 1992 * Centre d'Etudes de la Navigation Aerienne (CENA) * * timers * * $Id$ * $CurLog$ */ #ifndef Timer_H_ #define Timer_H_ #include "cplus_bugs.h" #include "Time.h" class CcuSignalHandler; #if 0 template class CcuListOf; #else #include "List.h" #endif class CcuBaseTimer { public: enum timer_status { Active, Inactive }; private: static CcuSignalHandler* TimeOutHandler; static CcuBaseTimer* FirstActive; #ifndef CPLUS_BUG19 static CcuListOf * OtherActive; #else static CcuList* OtherActive; #endif static void ClassInit (); static void HandleSignal (int); static void SetAlarm (Millisecond); static void StopAlarm (); static CcuBaseTimer* ExtractNextActive (); static int IsInactive (CcuBaseTimer*); Millisecond NextDate; Millisecond Period; int PulsesLeft; timer_status Status; void Activate (); void Schedule (Millisecond); void Reschedule (); protected: virtual void Handle (Millisecond); public: CcuBaseTimer (Millisecond, int = -1); virtual ~CcuBaseTimer (); 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; } }; class CcuTimer : public CcuBaseTimer { protected: void (*Handler) (Millisecond); void Handle (Millisecond); public: CcuTimer (Millisecond, void (*) (Millisecond), int = -1); ~CcuTimer (); }; #endif /* Timer_H_ */