// Copyright (C) 2003 Intel Corporation ////////////////////////////////////////////////////////////////////////// // Timer.h // // This file contains the definition of the Timer class // The timer class wraps the TimerManager into an easy-to-use // object-oriented interface. // // Usage: // // Option 1: Construct an instance of the "Timer" class with an external // callback function. When calling the "start" method, the callback // function will be registered with the timer manager and start working. // // Option 2: Subclass the "Timer" class and reimplement the virtual "run" // method. When calling the "start" method, the "run" method will be called // on timer expiration // // Implementation overview: // Calling the "start" method will register a new timer, which will call the // "run" method. The default implementation of the "run" method will call // the Callback function given in the constructor. ////////////////////////////////////////////////////////////////////////// #ifndef _LAD_TIMER_H #define _LAD_TIMER_H #ifndef NULL #define NULL 0 #endif #ifndef __IMR_WIN__ #include #include "Lock.h" #else // Redefining FD_SETSIZE must be done before including the windows tcp/ip header files. // http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx #define FD_SETSIZE 1024 #include #include #include #endif #include "TimerManager.h" typedef void (*CallbackFunction) (void*); class Timer { public: Timer (CallbackFunction func = NULL, void* param = NULL); virtual ~Timer(); void start(long msecs, bool recurring = true); void stop(); #ifdef __IMR_WIN__ static unsigned long tickCount() { return GetTickCount(); } #else static unsigned long tickCount(); #endif protected: virtual void run(); #ifndef __IMR_WIN__ static Semaphore _sem; static struct timeb _base; #endif private: struct _CallbackParam: public CallbackParam{ Timer *self; _CallbackParam(Timer* t){self = t;} _CallbackParam():self(0){} virtual ~_CallbackParam(){} }; static void _internalCallback(SPtr p); CallbackFunction _func; void * _param; int _timerId; }; #endif //_LAD_TIMER_H