女生做网站主题有哪些/搜索引擎优化实训报告
EGE专栏:EGE专栏
目录
- 时间函数
- 1. 延时函数
- 2. 帧率延时
- 3. API 延时
- 4. 程序运行时间
- 计时
- 倒计时
时间函数
1. 延时函数
- 至少延迟以毫秒为单位的时间
delay(time);
- 平均延迟以毫秒为单位的时间 附带刷新窗口的作用
delay_ms(time);
2. 帧率延时
- 附带刷新窗口的作用
- 延迟以 FPS 为准的时间,以实现稳定帧率
delay_fps(fps);
- 延迟以 FPS 为准的时间,以实现稳定帧率(带跳帧)
delay_jfps(fps);
- 使用示例,用来稳定帧率,设定一秒钟循环60次(实际受一个循环的执行时间影响)
for ( ; is_run(); delay_fps(60)) {}
3. API 延时
- 不会附带刷新窗口的作用
- 实际调用API中的Sleep ,因直接调用Sleep会被转化为调用delay
VOID api_sleep(long dwMilliseconds);
- dwMilliseconds 要延迟的时间,以毫秒为单位
4. 程序运行时间
- 获取当前程序从初始化起经过的时间,以秒为单位, 精度 0.01 秒
double fclock();
通过不断地获取当前时间,可以用来计时和倒计时。
计时
程序创建个开始时间变量,在帧循环中不断获取当前时间,然后得到时间差,便可以计算时间。如果想要重新计时,把开始时间设为当前时间即可重新开始
示例程序:
#include <graphics.h>int main()
{initgraph(480, 320);setrendermode(RENDER_MANUAL);setbkcolor(WHITE);setcolor(BLACK);setfont(20, 0, "楷体");setbkmode(TRANSPARENT);//设置开始时间double startTime = fclock();for (; is_run(); delay_fps(60)) {cleardevice();//在帧循环中不断获取运行时间double runTime = fclock();//当前时间就等于两个时间差double curTime = runTime - startTime;//输出时间,小数时间显示outtextxy(20, 20, "小数时间显示:");xyprintf(20, 40, "运行总时间:%.3lf", runTime);xyprintf(20, 60, "计时:%.3lf", curTime);//输出时间,整数时间显示outtextxy(20, 120, "整数时间显示:");xyprintf(20, 140, "运行总时间:%d", (int)runTime);xyprintf(20, 160, "计时:%d", (int)curTime);//按下任意键重新计时if (kbmsg()) {//清空按键消息flushkey();//把开始时间设置为当前时间即可startTime = runTime;}}getch();closegraph();return 0;
}
倒计时
倒计时和计时类似,只不过设立结束时间 endTime。不断地将当前时间与结束时间比较,结束时间和当前时间的差就等于剩余时间。
- 时间到的标志为 当前时间 >= 结束时间
- 剩余时间 = 结束时间 - 当前时间, 如果剩余时间小于0则置为0
- 倒计时的整数要向上取整, 即转成的整数不能比当前值小, 使用头文件 math.h 中的 ceil() 函数
- 时间重置:将 结束时间 = 当前时间 + 要倒计时的时间 即可
倒计时示例:
#include <graphics.h>
#include <math.h>int main()
{initgraph(480, 320);setrendermode(RENDER_MANUAL);setbkcolor(WHITE);setcolor(BLACK);setfont(20, 0, "楷体");setbkmode(TRANSPARENT);//设置结束时间, 这里设10秒倒计时double endTime = fclock() + 10;for (; is_run(); delay_fps(60)) {cleardevice();//在帧循环中不断获取运行时间double runTime = fclock();//当前时间就等于两个时间差double remainTime = endTime - runTime;if (remainTime < 0)remainTime = 0;//输出时间,小数时间显示outtextxy(20, 20, "小数时间显示:");xyprintf(20, 40, "运行总时间:%.3lf", runTime);xyprintf(20, 60, "倒计时:%.3lf", remainTime);//输出时间,整数时间显示outtextxy(20, 120, "整数时间显示:");xyprintf(20, 140, "运行总时间:%d", (int)runTime);xyprintf(20, 160, "倒计时:%d", (int)ceil(remainTime));//剩余时间为0, 或者 runTime >= endTimeif (remainTime == 0)outtextxy(20, 220, "时间到了");//按下任意键重新倒计时if (kbmsg()) {//清空按键消息flushkey();//把结束时间设置为当前时间加上要倒计时的时间, 这里设10秒endTime = runTime + 10;}}getch();closegraph();return 0;
}
EGE专栏:EGE专栏