`
deepfuture
  • 浏览: 4401777 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80082
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70095
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103409
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285917
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15018
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67606
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32173
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46000
社区版块
存档分类
最新评论

CTIMER类-无论机器运行速度如何,都能保持恒定的频率

阅读更多
无论机器运行速度如何,都能保持恒定的频率
CTIMER.CPP
-------------------------

#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-22

    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

    这个"02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序.rar"压缩包包含了一系列针对STC8A8K芯片上所有定时器的测试程序,这些程序对于理解和应用这些定时器功能至关重要。 STC8A8K系列单片机提供了多个定时器,包括...

    一个高层线程工具类(Timer)---马克-to-win java视频

    一个高层线程工具类(Timer)---马克-to-win java视频

    02-Timer0-Timer1-Timer2测试程序_STC15W408AS跑马灯程序_

    通过控制Timer1中断的频率,我们可以调整跑马灯的滚动速度。 5. 安全考虑:在编程过程中,要注意防止定时器溢出,避免程序进入死循环。同时,为了防止意外的硬件故障,应当设置适当的保护机制,如复位电路。 6. ...

    timer-master.rar

    【标题】"timer-master.rar" 是一个压缩包文件,它包含了一个名为 "timer-master" 的项目,该项目很可能是用于教学目的,让学生或开发者学习如何在微信小程序平台上开发一个时钟应用。微信小程序是一种轻量级的应用...

    02-Timer0-Timer1-Timer2测试程序_STC15W408AS跑马灯程序_源码.zip

    标题中提到的"02-Timer0-Timer1-Timer2测试程序"指的是针对这款单片机的定时器功能进行的测试代码,而"跑马灯程序"则通常是指通过控制LED灯的顺序闪烁来实现的一种视觉效果。下面我们将详细探讨这些知识点。 首先,...

    Spring使用timer定时器-能精确几点运行定时任务

    本教程将详细介绍如何在Spring中使用`Timer`来实现能精确到几点运行的定时任务。 首先,我们需要理解`Timer`的基本概念。`java.util.Timer`和`java.util.TimerTask`是Java中的两个类,用于调度未来任务的执行。`...

    Java--Timer--TimerTask--.rar_java timer

    在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们用于调度周期性的任务执行。这两个类在多线程环境下尤其有用,能够帮助开发者安排在将来某一特定时间或定期执行的任务。让我们深入了解一下`Timer`和`...

    jquery timer, -.1.2.js

    总结来说,jQuery Timer-.1.2.js版本是一个强大而灵活的定时器解决方案,它提供了丰富的接口供开发者调用,使得在JavaScript中处理定时任务变得简单。熟练掌握其用法,能有效提升Web应用的功能性和用户体验。在实际...

    02-Timer0-Timer1-Timer2.rar_51单片机_TIMER0_TIMER0 timer1_Timer1Con

    Timer0、Timer1和Timer2是STC51系列单片机内建的三个定时器模块,每个都有其特定的用途和配置方式。下面我们将详细探讨这些定时器的工作原理、功能以及如何进行配置。 首先,Timer0是8位定时器,通常用于系统级的...

    php 计算页面运行时间 Timer 类

    $timer-&gt;start('template_rendering'); // 假设这里渲染模板 // ... $timer-&gt;stop('template_rendering'); ``` 这样,我们就能得到数据库查询和模板渲染的各自耗时,有助于找出程序中的瓶颈并进行优化。 总的来...

    1-click-timer-8.3.1

    名称:1-click-timer -------------------- 版本:8.3.1 作者:Made in Sweden 分类:学习办公 -------------------- 概述:一键设置计时器! 描述: 一键设置计时器! *快捷方便 *时尚的设计 *离线工作 *安全:不...

    Python库 | new_timer-0.0.2-py3-none-any.whl

    python库。 资源全名:new_timer-0.0.2-py3-none-any.whl

    Agilely-Timer-for-Android

    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

    10-MSP432-Timer-32-中断.rar

    msp430Timer-A

    ### msp430 Timer-A 控制方法与例程详解 #### 一、msp430 Timer-A 基础介绍 在 MSP430 微控制器系列中,Timer-A 是一个非常重要的外设,它提供了多种定时和计数功能,能够支持不同的应用需求。Timer-A 是一个 16 ...

    Timer0-Normal mode_timer0normalmode_avrtimer0_

    在AVR微控制器系列中,Timer0是一种基本的定时器资源,常用于各种实时操作,如中断服务、脉冲宽度调制(PWM)或者简单的计数任务。本文档将深入探讨如何在正常模式下配置和使用Timer0。 一、Timer0概述 Timer0是一...

    Timer0-99999999.rar_51定时器仿真

    在实际仿真过程中,我们可能会使用像Proteus或Keil μVision这样的软件,这些工具可以模拟硬件环境和单片机代码的运行,帮助开发者检查程序的正确性,观察定时器中断的触发和计数过程,以及数码管的显示效果。...

    ·关于C#中timer类 在C#里关于定时器类就有3个

    ### 关于C#中的Timer类 在C#中,提供了三种不同的定时器类来满足不同场景的需求:`System.Windows.Forms.Timer`、`System.Threading.Timer` 和 `System.Timers.Timer`。下面将详细介绍这三个类的特点及应用场景。 ...

    timer2-capture-mode.rar_Capture

    在捕获模式下,Timer2会根据外部输入引脚上的上升沿或下降沿更新其寄存器值,这个值可以用来计算脉冲的周期、频率或者捕获到的时间间隔。 BJX 301A是一款具有集成定时器功能的微控制器,它的Timer2模块支持捕获功能...

Global site tag (gtag.js) - Google Analytics