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

📄 asl_timer.cpp

📁 泡泡堂单机版(含ASL游戏引擎源码 泡泡堂单机版(含ASL游戏引擎源码
💻 CPP
字号:
//-----------------------------------------------------------------------------
//
//    ____ Azure Star Game Engine 蓝星游戏引擎 ____
//
//    Copyright (c) 2006, 蓝星工作室
//    All rights reserved.
//
//    文件名称: asl_timer.cpp
//    摘    要: 高精度计时器类实现
//
//    当前版本: 1.0
//    作    者: 汤  祺
//    创建日期: 2006-7-26
//
//-----------------------------------------------------------------------------

#include "asl_timer.h"

namespace ASL
{

// 类静态变量定义
__int64 ASLTimer::m_n64Freq = 0;

//-----------------------------------------------------------------------------
// 函数名: ASLTimer::ASLTimer()
// 功  能: 构造函数
// 参  数: [void] - 无
// 返回值: [void] - 无
//         失败则抛出ASLSimpleException异常
//-----------------------------------------------------------------------------
ASLTimer::ASLTimer(int nPrecision, bool bPlay)  throw(ASLSimpleException)
: m_n64TimeBegin(0)
, m_n64TimeEnd(0)
, m_TimerStatus(tsStop)
{
	if (m_n64Freq == 0)
	{
		LARGE_INTEGER tmp;
		if (QueryPerformanceFrequency(&tmp) == FALSE)
		{
			throw ASLSimpleException("本机无法使用高精度计时器");
		}
		m_n64Freq = tmp.QuadPart;
	}

	ASSERT(nPrecision > 0);
	m_nPrecision = nPrecision;

	if (bPlay)
	{
		Play();
	}
}

//-----------------------------------------------------------------------------
// 函数名: ASLTimer::~ASLTimer()
// 功  能: 析构函数
// 参  数: [void] - 无
// 返回值: [void] - 无
//-----------------------------------------------------------------------------
ASLTimer::~ASLTimer(void)
{
}

//-----------------------------------------------------------------------------
// 函数名: ASLTimer::GetTime()
// 功  能: 取当前计时器读数, 该值除以精度则为秒数
// 参  数: [void] - 无
// 返回值: [DWORD] - 若计时器处于运行状态, 则返回开始到当前时刻的计数值
//                   若计时器已停止, 则返回从开始到停止时刻的计数值
//-----------------------------------------------------------------------------
DWORD ASLTimer::GetTime(void)
{
	if (m_TimerStatus != tsRun)
	{
		return DWORD((m_n64TimeEnd - m_n64TimeBegin) * m_nPrecision / m_n64Freq);
	}
	else
	{
		return DWORD((GetCurrentCount() - m_n64TimeBegin) * m_nPrecision / m_n64Freq);
	}
}

//-----------------------------------------------------------------------------
// 函数名: ASLTimer::Play()
// 功  能: 开始计时
// 参  数: [void] - 无
// 返回值: [void] - 无
//-----------------------------------------------------------------------------
void ASLTimer::Play(void)
{
	if (m_TimerStatus == tsStop)
	{
		m_n64TimeBegin = GetCurrentCount();
	}
	m_TimerStatus = tsRun;
}

//-----------------------------------------------------------------------------
// 函数名: ASLTimer::Stop()
// 功  能: 停止计时
// 参  数: [void] - 无
// 返回值: [void] - 无
//-----------------------------------------------------------------------------
void ASLTimer::Stop(void)
{
	m_n64TimeEnd = GetCurrentCount();
	m_TimerStatus = tsStop;
}

//-----------------------------------------------------------------------------
// 函数名: ASLTimer::Pause()
// 功  能: 暂停计时
// 参  数: [void] - 无
// 返回值: [void] - 无
//-----------------------------------------------------------------------------
void ASLTimer::Pause(void)
{
	m_n64TimeEnd = GetCurrentCount();
	m_TimerStatus = tsPause;
}

//-----------------------------------------------------------------------------
// 函数名: ASLTimer::GetCurrentCount()
// 功  能: 取系统计时器的计数值
// 参  数: [void] - 无
// 返回值: [__int64] - 系统计时器的计数值
//-----------------------------------------------------------------------------
__int64 ASLTimer::GetCurrentCount(void)
{
	LARGE_INTEGER tmp;
	QueryPerformanceCounter(&tmp);
	return tmp.QuadPart;
}

} // namespace ASL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -