美文网首页
01_时间与日期(Timer)

01_时间与日期(Timer)

作者: Mr_whale | 来源:发表于2017-08-13 15:17 被阅读0次

    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

    相关文章

      网友评论

          本文标题:01_时间与日期(Timer)

          本文链接:https://www.haomeiwen.com/subject/byherxtx.html