C语言基础--测试程序中实现对FPS的控制
2017-10-11 21:41
447 查看
const int FRAMES_PER_SECOND = 25; const int SKIP_TICKS = 1000 / FRAMES_PER_SECOND; DWORD next_game_tick = GetTickCount(); // GetTickCount() returns the current number of milliseconds // that have elapsed since the system was started int sleep_time = 0; bool game_is_running = true; while( game_is_running ) { update_game(); display_game(); next_game_tick += SKIP_TICKS; sleep_time = next_game_tick - GetTickCount(); if( sleep_time >= 0 ) { Sleep( sleep_time ); } else { // Shit, we are running behind! } }
测试程序需要模拟现实中帧的速率(FPS)。
这个问题常出现在game loop中。需要一种方法,在控制FPS的同时,避免CPU的消耗。
问题搜索自 https://stackoverflow.com/questions/771206/how-do-i-cap-my-framerate-at-60-fps-in-java
答案中推荐网站 http://www.koonsolo.com/news/dewitters-gameloop/
以上代码即为引用的代码。
在cocos2d-x游戏框架代码中,也有类似的方法,60fps
long myInterval = 1.0f/60.0f*1000.0f
static long getCurrentMillSecond() { long lLastTime; struct timeval stCurrentTime; gettimeofday(&stCurrentTime,NULL); lLastTime = stCurrentTime.tv_sec*1000+stCurrentTime.tv_usec*0.001; //millseconds return lLastTime; }
while (program_run) { lastTime = getCurrentMillSecond(); doSomething(); curTime = getCurrentMillSecond(); if (curTime - lastTime < myInterval) { usleep((myInterval - curTime + lastTime)*1000); } }
相关文章推荐
- 学习笔记 Java_毕向东_语言基础_程序流程控制 2014.7.29
- 今天可怜!我想做一个控制网络连接的程序,不管用什么语言都行,只要实现网络断开与连接!
- 黑马程序员—Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- Java语言基础——贰(程序流程控制)
- JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决
- PL/0语言编译程序整理实现:(11)、测试界面
- Java语言基础组成之:程序流程控制、函数、数组
- 黑马程序员——Java语言基础(二)---程序流程控制语句、函数
- 在单链表的基础上用c++实现的链栈,并使用进制转换,表达式求值两个小程序来测试
- PL/0语言编译程序整理实现:(12)、测试代码
- Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- 黑马程序员——Java语言基础:程序流程控制、函数、数组
- 黑马程序员_java的语言基础组成进阶(对第三课程序流程控制的总结)
- [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套
- java基础3--程序控制语句,类、对象和方法
- 零基础易语言入门教程(三)之了解控制台程序
- 程序测试程序(配合游戏及学习控制管理器使用)
- 蚁群算法小程序(C/C++语言实现)
- 蜘蛛/爬虫程序的多线程控制(C#语言)
- 用VC++实现控制程序运行一实例