01_时间与日期(Timer)

Timer

Paste_Image.png

test case :

Paste_Image.png

Min timespan 在linux操作系统中是微秒,在windows操作系统中这是毫秒。(即如同样的程序在linux中跑 第二行输出则为0.000001秒)

分析源码可知:Timer的构造函数会记录当前的clock数作为计时起点,每当调用elapsed()时就获取此刻的clock数,减去计时起点_start_time在除掉CLOCKS_PER_SEC就可以获得以秒为单位的已经流逝的时间。PS:如果调用restart(),则重置_start_time重新开始计时。

timer接口简单,轻巧也好用,使用与大部分的程序计时任务,但是使用时,我们必须清楚的理解到elapsed函数的计时精度是取决于当前的操作系统的,难以做到跨平台timer也不视野大跨度时间段的测量,可提供的最大时间跨度只有几百个小时,如果需要以天或者是月甚至是年作为时间的单位则不能使用timer,应该转而使用date_time库。

Progress_Timer

继承自 boost::timer ,作用相同,只是其在析构函数中会输出流逝的时间,所以在使用时,只需要声明 progress_timer 对象即可,当对象离开其生命期时,会自动输出流逝时间。在同一个小程序里测量多个时间,可以加上花括号来限定其生命期即可。

Paste_Image.png
Paste_Image.png

2.3.2

下面的代码把Progress_timer的输出转移到了stringstream中,它可以被转换为字符串供其他应用使用。

Paste_Image.png

2.3.2扩展计时精度

如果需要更高的时间精度,可以直接修改progress_timer的代码,但是这个不是一个好主意。原则上程序库的代码实不应该被用户修改的,合理的做法是使用“开--闭”原则扩展progress_timer. “开--闭”原则的思想是对扩展开放修改关闭。

但是很遗憾,progress_timer并没有为扩展而预留发挥的空间。因此我们只能使用模板技术仿造progress_timer编写一个新类,以实现任何精度的输出。

Paste_Image.png

但是要注意的是:在win32平台大于3已经没有意义,因为其只能显示到毫秒。

2.4 Progress_display

test.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容