blob: e577255584d99051d9296131895cc52213b7d07e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#ifndef _TICKTIMER_H
#define _TICKTIMER_H
#include <ctime>
#include <iostream>
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
|