Timer
Paste_Image.pngtest case :
Paste_Image.pngMin 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.png2.3.2
下面的代码把Progress_timer的输出转移到了stringstream中,它可以被转换为字符串供其他应用使用。
Paste_Image.png2.3.2扩展计时精度
如果需要更高的时间精度,可以直接修改progress_timer的代码,但是这个不是一个好主意。原则上程序库的代码实不应该被用户修改的,合理的做法是使用“开--闭”原则扩展progress_timer. “开--闭”原则的思想是对扩展开放修改关闭。
但是很遗憾,progress_timer并没有为扩展而预留发挥的空间。因此我们只能使用模板技术仿造progress_timer编写一个新类,以实现任何精度的输出。
Paste_Image.png但是要注意的是:在win32平台大于3已经没有意义,因为其只能显示到毫秒。
网友评论