⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.cpp

📁 一个自己写的游戏引擎,用DirectX 写成
💻 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 + -