码迷,mamicode.com
首页 > 其他好文 > 详细

源码之timer类

时间:2017-07-12 01:14:28      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:标准   span   依赖   cloc   测量   ons   public   返回   计算   

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 elpsed_min()const{
     return double(1)/double(CLOCKS_PER_SEC);
  }  
   double elspsed_max()const{
     return (double((std::numberic_limits<std::clock_t>::max)())-double(_start_time))/double(CLOCKS_PER_SEC);
  }
private:
  std::clock_t _start_time;
}

以上是boost中关于time的类源码。该类接口简单,使用轻巧,可使用与大部分计时任务。

源代码中使用c++标准库头文件<ctime>中的std::clock()函数,该函数返回自进程启动以来的clock数,而每一秒的clock数则是由宏定义CLOCKS_PER_SEC决定,该宏定义的值因操作系统而异,Win32下是1000即精度为毫秒,Linux下则为1000000即精度为微妙。

timer的构造函数中记录了当前的clock数作为计时起点,并将起点记录在私有变量_start_time中,每当调用elapsed方法时,获取此时的clock数值,然后减去起点时的clock值就是流失的clock数值差,然后除以宏定义CLOCKS_PER_SEC转换成系统精度的时间。

timer::restart()

 

方法重新设置计时起点值,即std::clock()获取当前的clock数赋值给_start_time。

timer::elapsed_min()

 

用于获取该类能够获取的最小时间单位。即CLOCKS_PER_SEC宏定义的倒数。

timer::elapsed_max()

 

同理获取时间的最大单位。该方法中使用了标准库中的数值极限类numberric_limits来获取系统能容纳最大的clock数,然后减去起点的_start_time来计算可能的最大clock差值,除以宏定义CLOCKS_PER_SEC转换以下时间单位。

你可能会发现该类没有析构函数,这是因为该类中只有一个std::clock_t类型的私有属性,并没有什么资源可以释放,所以不写也是非常明智的抉择。

由此可以看出该类的局限性:如果时间跨度过大,则该类就无法实现时间的测量了。这要依赖于另一个时间类date_time类。明天见<点击这里哦!!!>

 

源码之timer类

标签:标准   span   依赖   cloc   测量   ons   public   返回   计算   

原文地址:http://www.cnblogs.com/first-semon/p/7153103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!