diff --git a/include/circle/timer.h b/include/circle/timer.h index 79fc60f..7a9fa98 100644 --- a/include/circle/timer.h +++ b/include/circle/timer.h @@ -40,7 +40,10 @@ typedef void TKernelTimerHandler (TKernelTimerHandle hTimer, void *pParam, void /// \return TRUE if new time can be set, FALSE if new time is invalid (do not set) typedef boolean TUpdateTimeHandler (unsigned nNewTime, unsigned nOldTime); -typedef void TPeriodicTimerHandler (void); +class CPeriodicTimerHandler { + public: + virtual void onTimer () = 0; +}; extern "C" void DelayLoop (unsigned nCount); @@ -141,7 +144,7 @@ public: void RegisterUpdateTimeHandler (TUpdateTimeHandler *pHandler); /// \param pHandler Handler which is called on each timer tick (HZ times per second) - void RegisterPeriodicHandler (TPeriodicTimerHandler *pHandler); + void RegisterPeriodicHandler (CPeriodicTimerHandler *pHandler); private: void PollKernelTimers (void); @@ -178,7 +181,7 @@ private: TUpdateTimeHandler *m_pUpdateTimeHandler; #define TIMER_MAX_PERIODIC_HANDLERS 4 - TPeriodicTimerHandler *m_pPeriodicHandler[TIMER_MAX_PERIODIC_HANDLERS]; + CPeriodicTimerHandler *m_pPeriodicHandler[TIMER_MAX_PERIODIC_HANDLERS]; volatile unsigned m_nPeriodicHandlers; static CTimer *s_pThis; diff --git a/lib/timer.cpp b/lib/timer.cpp index 0d8cb6a..d1d0c1c 100644 --- a/lib/timer.cpp +++ b/lib/timer.cpp @@ -542,7 +542,7 @@ void CTimer::InterruptHandler (void) for (unsigned i = 0; i < m_nPeriodicHandlers; i++) { - (*m_pPeriodicHandler[i]) (); + m_pPeriodicHandler[i]->onTimer (); } } @@ -576,7 +576,7 @@ void CTimer::RegisterUpdateTimeHandler (TUpdateTimeHandler *pHandler) assert (m_pUpdateTimeHandler != 0); } -void CTimer::RegisterPeriodicHandler (TPeriodicTimerHandler *pHandler) +void CTimer::RegisterPeriodicHandler (CPeriodicTimerHandler *pHandler) { assert (pHandler != 0);