📄 timer.cpp
字号:
//--------------------------------------------------
// Desc: Timer
// Author: artsylee/2006.8.30
//--------------------------------------------------
#include "../stdafx.h"
#include "Timer.h"
CTimer::CTimer(DWORD interval)
{
m_bEnable = false;
m_StartTime = 0;
m_PauseTime = 0;
m_Interval = interval;
}
CTimer::~CTimer()
{
}
void CTimer::SetInterval(DWORD interval)
{
m_Interval = interval;
}
DWORD CTimer::GetPassTime(void)
{
// PAUSE
if(m_PauseTime)
{
return m_PauseTime;
}
// In Process
if(m_bEnable)
{
return timeGetTime() - m_StartTime;
}
// Disable
return 0;
}
void CTimer::Start(void)
{
m_bEnable = true;
m_StartTime = ::timeGetTime();
}
//-------------------------------------------------
// When you need not to resume In Pause State,
// Just call ReStart.
//-------------------------------------------------
void CTimer::ReStart(void)
{
m_bEnable = true;
m_StartTime = ::timeGetTime();
m_PauseTime = 0;
}
void CTimer::Stop(void)
{
m_bEnable = false;
m_StartTime = 0;
m_PauseTime = 0;
}
void CTimer::Pause(void)
{
if(!m_bEnable || !m_Interval)
{
return;
}
m_bEnable = false;
m_PauseTime = (abs((long)(::timeGetTime() - m_StartTime)))%m_Interval;
m_StartTime = 0;
}
bool CTimer::TimeOut(void)
{
if(m_bEnable)
{
DWORD CurTime = ::timeGetTime();
if(CurTime > m_StartTime + m_Interval - m_PauseTime)
{
m_StartTime = CurTime;
if(m_PauseTime)
{
m_PauseTime = 0;
}
return true;
}
}
return false;
}
//-------------------------------------------------
// CHTimer
//-------------------------------------------------
CHTimer::CHTimer()
{
m_bEnable = false;
m_dwLastTime = 0;
m_Deltime = 0.0;
m_Frame = 0;
LARGE_INTEGER lFreq;
::QueryPerformanceFrequency(&lFreq);
m_CPUFreq = (double)lFreq.QuadPart;
}
CHTimer::~CHTimer()
{
}
void CHTimer::Start()
{
m_bEnable = true;
::QueryPerformanceCounter(&m_StartTime);
}
double CHTimer::GetPassTime(void)
{
if(!m_bEnable)
{
return 0.0;
}
LARGE_INTEGER lNow;
::QueryPerformanceCounter(&lNow);
LONGLONG t_el = lNow.QuadPart - m_StartTime.QuadPart;
return ((double)t_el / m_CPUFreq);
}
double CHTimer::GetAveragePassTime(void)
{
if(!m_bEnable)
{
return 0.0;
}
DWORD tm = timeGetTime();
if(tm - m_dwLastTime <= 1000)
{
m_Deltime += GetPassTime();
m_Frame++;
}
else
{
m_CurFPS = m_Frame;
m_Frame = 0;
m_Curdeltime = m_Deltime;
m_Deltime = 0;
m_dwLastTime = tm;
}
if(m_CurFPS)
return m_Curdeltime/m_CurFPS;
else
return 0.0;
}
// End of this file.(artsylee 2006.8.30)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -