#include "CTimer.h"
//---------------------- default constructor------------------------------
//
//-------------------------------------------------------------------------
CTimer::CTimer(): m_FPS(0),
m_TimeElapsed(0.0f),
m_FrameTime(0),
m_LastTime(0),
m_PerfCountFreq(0)
{
//how many ticks per sec do we get
QueryPerformanceFrequency( (LARGE_INTEGER*)&m_PerfCountFreq);
m_TimeScale = 1.0f/m_PerfCountFreq;
}
//---------------------- constructor-------------------------------------
//
//use to specify FPS
//
//-------------------------------------------------------------------------
CTimer::CTimer(float fps): m_FPS(fps),
m_TimeElapsed(0.0f),
m_LastTime(0),
m_PerfCountFreq(0)
{
//how many ticks per sec do weget
QueryPerformanceFrequency( (LARGE_INTEGER*)&m_PerfCountFreq);
m_TimeScale =1.0f/m_PerfCountFreq;
//calculate ticks perframe
m_FrameTime = (LONGLONG)(m_PerfCountFreq /m_FPS);
}
//------------------------Start()-----------------------------------------
//
//call this immediately prior to game loop.Starts the timer (obviously!)
//
//--------------------------------------------------------------------------
void CTimer::Start()
{
//get the time
QueryPerformanceCounter( (LARGE_INTEGER*)&m_LastTime);
//update time to render next frame
m_NextTime = m_LastTime + m_FrameTime;
return;
}
//-------------------------ReadyForNextFrame()-------------------------------
//
//returns true if it is time to move on to thenext frame step. To be used if
//FPS is set.
//
//----------------------------------------------------------------------------
bool CTimer::ReadyForNextFrame()
{
if (!m_FPS)
{
MessageBox(NULL, "No FPS set in timer", "Doh!", 0);
returnfalse;
}
QueryPerformanceCounter( (LARGE_INTEGER*)&m_CurrentTime);
if (m_CurrentTime >m_NextTime)
{
m_TimeElapsed=(m_CurrentTime - m_LastTime) * m_TimeScale;
m_LastTime=m_CurrentTime;
//update time to render nextframe
m_NextTime = m_CurrentTime +m_FrameTime;
return true;
}
return false;
}
//--------------------------- TimeElapsed--------------------------------
//
//returns time elapsed since last call to thisfunction. Use in main
//when calculations are to be based on dt.
//
//-------------------------------------------------------------------------
double CTimer::TimeElapsed()
{
QueryPerformanceCounter( (LARGE_INTEGER*)&m_CurrentTime);
m_TimeElapsed= (m_CurrentTime -m_LastTime) * m_TimeScale;
m_LastTime=m_CurrentTime;
return m_TimeElapsed;
}
CTIMER.H
----------------
#ifndef CTIMER_H
#define CTIMER_H
//-----------------------------------------------------------------------
//
// Name: CTimer.h
//
// Author: Mat Buckland 2002
//
//Desc: Windows timer class for the book GameAI
// Programming with Neural Nets and GeneticAlgorithms.
//
//-----------------------------------------------------------------------
#include<windows.h>
class CTimer
{
private:
LONGLONGm_CurrentTime,
m_LastTime,
m_NextTime,
m_FrameTime,
m_PerfCountFreq;
doublem_TimeElapsed,
m_TimeScale;
floatm_FPS;
public:
//ctors
CTimer();
CTimer(float fps);
//whatdayaknow, this starts the timer
voidStart();
//determines if enough time has passed to moveonto next frame
boolReadyForNextFrame();
//only use this after a call to theabove.
doubleGetTimeElapsed(){returnm_TimeElapsed;}
doubleTimeElapsed();
};
#endif
相关推荐
C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4...
这个"02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序.rar"压缩包包含了一系列针对STC8A8K芯片上所有定时器的测试程序,这些程序对于理解和应用这些定时器功能至关重要。 STC8A8K系列单片机提供了多个定时器,包括...
一个高层线程工具类(Timer)---马克-to-win java视频
通过控制Timer1中断的频率,我们可以调整跑马灯的滚动速度。 5. 安全考虑:在编程过程中,要注意防止定时器溢出,避免程序进入死循环。同时,为了防止意外的硬件故障,应当设置适当的保护机制,如复位电路。 6. ...
【标题】"timer-master.rar" 是一个压缩包文件,它包含了一个名为 "timer-master" 的项目,该项目很可能是用于教学目的,让学生或开发者学习如何在微信小程序平台上开发一个时钟应用。微信小程序是一种轻量级的应用...
标题中提到的"02-Timer0-Timer1-Timer2测试程序"指的是针对这款单片机的定时器功能进行的测试代码,而"跑马灯程序"则通常是指通过控制LED灯的顺序闪烁来实现的一种视觉效果。下面我们将详细探讨这些知识点。 首先,...
本教程将详细介绍如何在Spring中使用`Timer`来实现能精确到几点运行的定时任务。 首先,我们需要理解`Timer`的基本概念。`java.util.Timer`和`java.util.TimerTask`是Java中的两个类,用于调度未来任务的执行。`...
在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们用于调度周期性的任务执行。这两个类在多线程环境下尤其有用,能够帮助开发者安排在将来某一特定时间或定期执行的任务。让我们深入了解一下`Timer`和`...
总结来说,jQuery Timer-.1.2.js版本是一个强大而灵活的定时器解决方案,它提供了丰富的接口供开发者调用,使得在JavaScript中处理定时任务变得简单。熟练掌握其用法,能有效提升Web应用的功能性和用户体验。在实际...
Timer0、Timer1和Timer2是STC51系列单片机内建的三个定时器模块,每个都有其特定的用途和配置方式。下面我们将详细探讨这些定时器的工作原理、功能以及如何进行配置。 首先,Timer0是8位定时器,通常用于系统级的...
$timer->start('template_rendering'); // 假设这里渲染模板 // ... $timer->stop('template_rendering'); ``` 这样,我们就能得到数据库查询和模板渲染的各自耗时,有助于找出程序中的瓶颈并进行优化。 总的来...
名称:1-click-timer -------------------- 版本:8.3.1 作者:Made in Sweden 分类:学习办公 -------------------- 概述:一键设置计时器! 描述: 一键设置计时器! *快捷方便 *时尚的设计 *离线工作 *安全:不...
python库。 资源全名:new_timer-0.0.2-py3-none-any.whl
Agilely-Timer-for-AndroidFor Agile and Scrum practitioners, this timer application allows to facilitate daily stand-up meetings and efficiently manage timeboxes. Time automatically allocated to ...
10-MSP432-Timer-32-中断.rar
### msp430 Timer-A 控制方法与例程详解 #### 一、msp430 Timer-A 基础介绍 在 MSP430 微控制器系列中,Timer-A 是一个非常重要的外设,它提供了多种定时和计数功能,能够支持不同的应用需求。Timer-A 是一个 16 ...
在AVR微控制器系列中,Timer0是一种基本的定时器资源,常用于各种实时操作,如中断服务、脉冲宽度调制(PWM)或者简单的计数任务。本文档将深入探讨如何在正常模式下配置和使用Timer0。 一、Timer0概述 Timer0是一...
在实际仿真过程中,我们可能会使用像Proteus或Keil μVision这样的软件,这些工具可以模拟硬件环境和单片机代码的运行,帮助开发者检查程序的正确性,观察定时器中断的触发和计数过程,以及数码管的显示效果。...
### 关于C#中的Timer类 在C#中,提供了三种不同的定时器类来满足不同场景的需求:`System.Windows.Forms.Timer`、`System.Threading.Timer` 和 `System.Timers.Timer`。下面将详细介绍这三个类的特点及应用场景。 ...
在捕获模式下,Timer2会根据外部输入引脚上的上升沿或下降沿更新其寄存器值,这个值可以用来计算脉冲的周期、频率或者捕获到的时间间隔。 BJX 301A是一款具有集成定时器功能的微控制器,它的Timer2模块支持捕获功能...