#ifndef _THREAD_THREADTIMER_HPP_ #define _COMMON_THREADTIMER_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_CALLBACK_HPP_ #include #endif #ifndef _COMMON_MMSYSTEM_HPP_ #include #endif #ifndef _THREAD_MUTEX_HPP_ #include #endif class ThreadTimer { public: ThreadTimer(void); ThreadTimer(WORD minResolution); virtual ~ThreadTimer(); DWORD getSystemTime(void)const; WORD startTimer(UINT deltaTime); WORD stopTimer(void); WORD isRunning(void)const; void insertHandler(PureCallback *lpCallback); void removeHandler(void); protected: virtual void timerStarted(void); virtual void timerStopped(void); private: static void CALLBACK timerProc(UINT wTimerID,UINT mMsg,DWORD dwUser,DWORD dummyOne,DWORD dummyTwo); WORD isFirstBreak(void)const; void isFirstBreak(WORD isFirstBreak); TIMECAPS mTimerCapability; WORD mMinResolution; WORD mIsOkay; WORD mHasTimedEvent; WORD mIsFirstBreak; UINT mTimerID; Mutex mTimerMutex; CallbackPointer mCallbackPointer; }; inline DWORD ThreadTimer::getSystemTime(void)const { return ::timeGetTime(); } inline WORD ThreadTimer::isRunning(void)const { return mHasTimedEvent; } inline void ThreadTimer::insertHandler(PureCallback *lpCallback) { mCallbackPointer=CallbackPointer(lpCallback); } inline void ThreadTimer::removeHandler(void) { mCallbackPointer=CallbackPointer(); } inline WORD ThreadTimer::isFirstBreak(void)const { return mIsFirstBreak; } inline void ThreadTimer::isFirstBreak(WORD isFirstBreak) { mIsFirstBreak=isFirstBreak; } #endif