您的位置:首页 > 其它

boost 库 timer组件的源码分析 [大三四八九月实习]

2013-08-08 10:33 316 查看
体会一下能够列入C++准标准库的源代码设计思想。



一、源码

timer是学到的boost库的第一个组件,其被封装的源代码还是比较简单的,类摘要如下:

class timer

{
 public:

         timer(){_start_time =std::clock();}
         void restart(){ _start_time =std::clock(); }
         double elapsed() const{return double (std::clock() - _start_time ) / CLOCKS_PER_SEC;}

         double elapsed_min() const{return double(1) /double(CLOCKS_PER_SEC);}

         double elapsed_max()const{return (double((std::numeric_limits<std::clock_t>::max)()) - double(_start_time) ) /double(CLOCKS_PER_SEC);}

 private:
	std::clock_t _start_time;
}

代码含义很好理解。昨天直接将代码翻译了一遍:boost库timer组件应用
1.std::clock():为标准库中的库函数,此函数返回自进程开启时到当前调用本身的clock数。每秒的clock数为CLOCKS_PER_SEC[
windows之上为 1000,Linux为1000000
]
2.std::numeric_limits为标准库的极限类,然后得到std::clock_t类型的极限值[最大值
].
3.上类中成员函数后跟const表示“常成员函数”。
常成员函数的形式为:
<类型说明符> <函数名> (<参数表>) const;
常成员函数有以下几个特点<功能 >,<也代表C++的思想
>[若有,则以后遇到再记录 ]
(1).在常成员函数内部不能修改此类对象内的任何数据成员的值。
(2).此常成员函数内部不能调用此类中非const的函数成员。
(3).如果以此类定义一个const对象,则该对象不能访问非const成员函数。

二、思想

我理解的就有限度了。

类中包含构造函数与析构函数。

构造函数和析构函数都是由系统自动调用。

构造函数从对象被定义时执行[ 可编写出程序循环程序需要的初始状态代码 ]。析构函数在对象生存期结束时被调用[ 内可编写此类中需要释放的资源 ]。

1.timer利用构造函数来保存进程启动以来的clock数[ 实质为时间段(clock数/(每秒返回的clock数 CLOCKS_PER_SEC) ) ]

2.利用变化的值初始化或者覆盖不变量[ _start_time = std:clock() ],使得可以得出程序中不同代码处之间的时间段值[ 每调用restart一次就可以输出从执行此函数开始到调用elapsed函数之间的时间值]。

3.调用C++标准库内的数据和函数来实现函数功能

(1)用std::clock()[ 已有的优秀库函数都不会被忘记,类原本就是一个比函数更大的框架 ]

(2)调用C++标准库的数值极限类的极大值[ 用C++库中已有的极大值,1是不用再去查C++最大极限值,而是不用担心这个值的错误 ]来得到C++的最大数值。如果从进程开启时就定义timer组件对象,则可以表示的时间段就可以达到最大[ 596.532h ],如果等进程开启良久后才定义timer组件对象或是在程序途中使用restart函数,则elapsed_max()能表示的时间段就越小。

这个结论可用以下代码测试:

Sleep(10000);
    cout << "\ntimeelapsed:"<< t.elapsed()<<"s";
     
    t.restart();
    cout << "\ntimeelapsed:"<< t.elapsed()<<"s";
    cout << "\nmax timespan:"<<t.elapsed_max()/3600 << "h";



当延迟10s[ 10000ms]后,elapsed_max()输出的值变小而且elapsed的输出值亦变小,可见这里的进程是指当前的运行的整个应用程序。



总的来说,这个小小的timer类利用了构造函数初始化数据、然后调用标准库函数来实现函数功能。就像咱平时好好想后写的代码一样。



此次笔记记录完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: