当前位置:C++技术网 > 资讯 > 超简单!使用Boost库实现计时器,以及计时器实现内部原理

超简单!使用Boost库实现计时器,以及计时器实现内部原理

更新时间:2015-06-25 21:48:47浏览次数:1+次

直接使用代码讲解使用Boost实现计时器的过程。
代码如下:
#include <boost/timer.hpp>// - boost计时器头文件
#include <iostream>
using namespace boost;
using namespace std;
#include <windows.h>
int main()
{
    timer t;// - 创建了对象后即启动计时器
    while (1)
    {
        Sleep(100);// - 睡眠100毫秒,减少刷屏
        system("cls");// - DOS清屏
        cout<<"计时:";
        cout<<t.elapsed();// - 从创建对象开始到现在已经使用的时间
        cout<<" 秒"<<endl;
    }
    return 0;
}


代码说明:
1.使用Boost库前,需要先安装好Boost库。安装Boost库的方法,参考《Windows下VS安装和使用Boost库入门》,这篇文章中有Boost库文件下载,和详细的配置过程,直到最后测试通过,非常详尽。
2.hpp是Boost库的头文件,如果没Boost程序,可能很陌生。Boost是基于模板实现的,使用前要编译Boost库生成CPP和obj文件,提供给程序使用。
3.包含了boost/timer.hpp头文件后,即可使用timer,即Boost的计时器。这个定时器创建后就启动了计时,然后可以随时调用elapsed()函数返回经过的秒数。当然,它的单位是毫秒。直接返回的数字是xxx.xxx秒。非常人性化的处理好了,不需要我们再将其转换为秒了。
3.调用elapsed_max()函数可以获取计时器能表示的最大时间,调用elapsed_min()函数可以获取计时器能表示的最小时间,就是时间分辨率,也就是1毫秒。
4.程序中使用cls来清除DOS上的所有字符,然后重新输出。因为频繁的刷新DOS界面,会让界面闪的很厉害,就是用了Windows的睡眠函数Sleep()来暂停一下。降低刷新频率。
5.system("cls")则是DOS清屏的指令,在每次刷新前将以前的字符清除,这样可以在同一个界面不停显示时间,且时间不断的在更新。
6.下面是运行后的界面截图:


Boost计时器内部实现原理:
        这个计时器类,在构造函数时就启动了计时器,调用的是std::clock()函数获取启动的时间,也是计时器对象初始化的时间。elapse函数则是又重新使用std::clock()函数获取当前时间,并减去初始化的时间,从而得到间隔时间,也就是流逝的时间。
        而std::clock()在内部,则是调用系统(Windows)API函数GetSystemTimeAsFileTime来获取当时的时间。这里则是在Boost库编译时才生成的。因为在不同的平台,这个API函数是不一样的,因此,不同的平台这里是不一样的。但是在上层,即计时器类中,是不管这些差异的。在Boost库编译完后,这些就已经生成在计算机中了。Boost库文件只有几百兆,但是编译出来后,则有两G多。Boost库涵盖各种各样的东西,支持很多的处理,时间的处理就是非常简单的。