首页 > 代码库 > 源码之timer类

源码之timer类

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类