Boost库的timer类讲解

本文介绍了 Boost 库中的 Timer 类,详细解析了其源码,并通过一个简单案例展示了如何使用 Timer 类来测量时间。Timer 类使用标准 C 库中的 clock 函数来记录 CPU 时间,适用于一般精度的时间测量。

一、概述

一直以来,C++对时间的处理都不是很理想,而且时间和日期在工作中又是我们经常遇到的,故而我们只能求助于C语言的笨拙的函数。而boost库却完美地使用timer,date_time和chrono解决了这个问题。本文我们只介绍timer类。

二、timer类的源码解析

以下是boost_1_63_0版本中的timer类的去除注释、去除掉注释掉的代码的源码

#ifndef BOOST_TIMER_HPP
#define BOOST_TIMER_HPP
#include <boost/config.hpp>
#include <ctime>
#include <boost/limits.hpp>

# ifdef BOOST_NO_STDC_NAMESPACE
    namespace std { using ::clock_t; using ::clock; }
# endif
namespace 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;
    };
}
#endif

timer计时器使用了标准头文件<ctimer>里的clock()函数,这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。每秒的clock由宏CLOCKS_PER_SEC定义。

timer()构造函数以当前的clock数作为计时起点,保存到私有成员变量:_start_time中;restart()则重置_start_time重新开始计时;elapsed()这个函数的作用是获取以秒为单位的已经流失的时间。

elapsed_max()使用了标准库中的极限类numeric_limits,返回时间的最大值。

elapsed_min()返回timer能够测量的最小时间单位,是CLOCKS_PER_SEC的倒数。

三、该类的使用小案例

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

int main()
{
    timer t;
    cout << "elapsed() = " << t.elapsed() << "秒" << endl;
    cout << "elapsed_min() = " << t.elapsed_min() << "秒" << endl;
    cout << "elapsed_max() = " << t.elapsed_max() << "时" << endl;
    return 0;    
}

执行结果如下
这里写图片描述

四、总结

我们都可以看到,timer类中并没有析构函数,原因很简单,因为_start_time仅仅是个clock_t类型的成员变量,根本就没有资源可以释放。timer类的精度依赖于操作系统或者编译器,因此它并不适合高精度的时间测量,同时也难以做到跨平台。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

The_Web3_社区

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值