#ifndef _TICKTIMER_H #define _TICKTIMER_H #include #include class TickTimer { public: TickTimer(double f_dUpdateDelta) { m_dUpdateDelta = f_dUpdateDelta; m_iNrOfTicks = 0; m_dTicksPS = m_dRawTicksPS = m_dAvgTicksPS = m_dRawAvgTicksPS = 0.0; } void tick() { //DWORD l_CurClock = timeGetTime(); time_t l_CurClock = clock(); if (m_iNrOfTicks == 0) { m_FirstClock = m_LastClock = l_CurClock; } //update the ticks per second, based on the last tick period m_dRawTicksPS = (double)CLOCKS_PER_SEC / (double)(l_CurClock - m_LastClock); //m_dRawTicksPS = 1000.0 / (double)(l_CurClock - m_LastClock); double delta = (m_dRawTicksPS - m_dTicksPS); if ( (delta >= m_dUpdateDelta) || (delta <= -m_dUpdateDelta) ) m_dTicksPS = m_dRawTicksPS; m_LastClock = l_CurClock; //update the ticks per second, based on the average tick period m_iNrOfTicks++; m_dRawAvgTicksPS = (double)m_iNrOfTicks/((double)(m_LastClock - m_FirstClock)/(double)CLOCKS_PER_SEC); //m_dRawAvgTicksPS = (double)m_iNrOfTicks/((double)(m_LastClock - m_FirstClock)/1000.0); delta = (m_dRawAvgTicksPS - m_dAvgTicksPS); if ( (delta >= m_dUpdateDelta) || (delta <= -m_dUpdateDelta) ) m_dAvgTicksPS = m_dRawAvgTicksPS; } inline double getTicksPerSecond() { return m_dTicksPS; } inline double getRawTicksPerSecond() { return m_dRawTicksPS; } inline double getAvgTicksPerSecond() { return m_dAvgTicksPS; } inline double getRawAvgTicksPerSecond() { return m_dRawAvgTicksPS; } private: int m_iNrOfTicks; double m_dUpdateDelta, m_dTicksPS, m_dRawTicksPS, m_dAvgTicksPS, m_dRawAvgTicksPS; clock_t m_FirstClock, m_LastClock; /*DWORD m_FirstClock, m_LastClock;*/ }; #endif //_TICKTIMER_H