Boost开发指南-2.1timer

timer

timer类可以测量时间的流逝,是一个小型的计时器,提供毫秒级别的计时精度和操作函数,供程序员手工控制使用,就像是个方便的秒表。

timer位于名字空间boost,为了使用timer组件,需要包含头文件<boost/timer.hpp>,即:

timer类可以测量时间的流逝,是一个小型的计时器,提供毫秒级别的计时精度和操作函数,供程序员手工控制使用,就像是个方便的秒表。

timer位于名字空间boost,为了使用timer组件,需要包含头文件<boost/timer.hpp>,即:
#include <boost/ timer.hpp>
using namespace boost;

用法

timer对象一旦被声明,它的构造函数就启动了计时工作,之后就可以随时用elapsed()函数简单地测量自对象创建后所流逝的时间。成员函数elapsed_min()返回timer测量时间的最小精度,elapsed_max()返回timer能够测量的最大时间范围,两者的单位都是秒。

CLOCKS_PER_SEC的值因操作系统而不同,在Mac OS X、Linux下是1000000,而在win32下则是1000,也就是说在Mac OS X、Linux下的精度是微秒,而Win32下的精度是毫秒。

#include <iostream>
using namespace std;

// disable pragma warning
#define BOOST_ALLOW_DEPRECATED_HEADERS

#include <boost/timer.hpp>
using namespace boost;

int main()
{
	timer t; //声明一个计时器对象 开始计时

	cout << CLOCKS_PER_SEC << endl; //打印精度
	cout << "max timespan:"         //可度量的最大时间 以小时为单位
		<< t.elapsed_max() / 3600 << "h" << endl;
	cout << "min timespan:"        //可度量的最小时间 以秒为单位
		<< t.elapsed_min() << "s" << endl;
	cout << "now time elapsed:"    //输出已经流逝的时间
		<< t.elapsed() << "s" << endl;
}

在这里插入图片描述

类摘要

timer类非常小,全部实现包括所有注释也不过70余行,真正的实现代码则只有不到20行。作为我们学习的第一个Boost组件,值得把源码全部列出来仔细研究:

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 elapsed_max() const  
  
  {
    return (double((std::numeric_limits<std::clock_t>::max)())
       - double(_start_time)) / double(CLOCKS_PER_SEC); 
  }

  double elapsed_min() const            
   { return double(1)/double(CLOCKS_PER_SEC); }

 private:
  std::clock_t _start_time;
};

timer的计时使用了标准库头文件<ctime>里的std::clock()函数,它返回自进程启动以来的clock数,每秒的clock数则由宏CLOCKS_PER_SEC定义。

timer的构造函数记录当前的 clock 数作为计时起点,保存在私有成员变量_start_time中。每当调用elapsed()时就获取此时的 clock 数,减去计时起点_start_time,再除以CLOCKS_PER_SEC获得以秒为单位的已经流逝的时间。如果调用函数restart(),则重置_start_time重新开始计时。

函数elapsed_min()返回timer能够测量的最小时间单位,是 CLOCKS_PER_SEC的倒数。函数elapsed_max()使用了标准库的数值极限类numeric_limits,获得clock_t类型的最大值,采用类似elapsed()的方式计算可能的最大时间范围。

timer没有定义析构函数,这样做是正确且安全的。因为它仅有一个类型为clock_t的成员变量_start_time,故没有必要实现析构函数来特意“释放资源”(也无资源可供释放)。

使用建议

timer接口简单,轻巧好用,适用于大部分要求不高的程序计时任务。但使用时我们必须理解elapsed_min()elapsed_max()这两个计时精度函数的含义,它们表明了timer的能力。

timer不适合高精度的时间测量任务,它的精度依赖于操作系统或编译器,难以做到跨平台。timer也不适合大跨度时间段的测量,如果需要以天、月甚至年作为时间的单位则不能使用timer。

参考文献

https://download.csdn.net/download/qq_36314864/87796984

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值