📄 asl_timer.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 + -