boost-timer


1.boost库是一个C++的准标准库,而且开源,可移植所以发展很快。但是boost库的内容很多,而且库很大,但是boost库的很多代码只需要包含头文件,就可以使用,但是少量的库(如regex,文件系统库需要编译lib文件)。而且boost的文档很全,但是是英文的,而且源码本来看着就很吃力。所以从简单的库开始。

    首先boost库的编译,可以参考http://www.cnblogs.com/ComputerG/archive/2011/03/10/1979730.html,而且可以使用sublime通过设定环境变量来编辑自己的代码。具体如下:

第一步:新建C_INCLUDEDE_PATH的环境变量,如果已经存在,在后面添加boost的根目录,我的路径如下:D:\Program Files\DEV-CPP\Include\boost;。

第二步:新建LIBRARY_PATH的环境变量,如果已经存在,在后面添加编译好的.lib文件,如:D:\boost\bin\vc10\lib。(记得添加分号)。至此就可以使用sublime编辑-编译-使用boost库。

    其中sublime的配置可以参考:http://www.skymoon.biz/?p=1164


2.boost库的命名规则: 

boost_date_time-vc100-mt-gd-1_55.lib

前缀统一为:lib,库名称:boost_,编译器标识:-vc100(vs2010),多线程标识:-mt (mulit-thread),-gd表示debug版标识,-1_55表示是1.55版本的,后缀名:windows位.lib,类unix系统是.a(静态库).so(动态库)。


3.timer库:接口介绍,底层实现。(旧版本)

位置:boost/boost.timer.hpp     using namespace boost;

功能:是一个简易的计时工具,精确度为毫秒

接口函数:

        elapsed_min() : 返回可以测量的最小精度。

        elapsed_max() : 返回timer能够测量的最大范围。

        elapsed() : 表示自timer对象被创建之后到调用elapsed()函数所经过的时间,返回double,保留三位有效数字。

        私有变量:clock_t start_time;(int的别名)

底层实现:

      使用C语言中<ctime>头文件的std::clock()函数:返回自进程启动后经过的时钟数(clock()),而每秒的时钟频率位宏定义的常量:CLOCKS_PER_SEC,那么我们使用(end_clock - start_clock) / CLOCKS_PER_SEC 得到经过的时间。

示例代码:

#include <boost/timer.hpp>
namespace boost {
class timer {
 public:
         timer();                        // postcondition: elapsed()==0
  // compiler generated copy constructor, copy assignment, and dtor apply
  void   restart();                      // post: elapsed()==0
  double elapsed() const;                // return elapsed time in seconds

  double elapsed_max() const;  // return estimated maximum value for elapsed()
  // Portability warning: elapsed_max() may return too high a value on systems
  // where std::clock_t overflows or resets at surprising values.

  double elapsed_min() const;            // return minimum value for elapsed()
  }; // timer
} // namespace boost

新版本的timer库。cpu_timer 和auto_cpu_timer

1.auto_cpu_timer类的概述如下:

 class auto_cpu_timer : public cpu_timer
    {
    public:
      explicit auto_cpu_timer(short places = default_places);
               auto_cpu_timer(short places, const std::string& format);
      explicit auto_cpu_timer(const std::string& format);
               auto_cpu_timer(std::ostream& os, short places, const std::string& format);
      explicit auto_cpu_timer(std::ostream& os, short places = default_places);
               auto_cpu_timer(std::ostream& os, const std::string& format);

     ~auto_cpu_timer() noexcept;

      // compiler generated; shown for exposition only
      auto_cpu_timer(const auto_cpu_timer&) = default;
      auto_cpu_timer& operator=(const auto_cpu_timer&) = default;

      // observers
      std::ostream&      ostream() const noexcept;
      short              places() const noexcept;
      const std::string& format_string() const noexcept;

      // actions
      void               report();
    };

使用跨平台的变量(如下),能够实现纳秒级的时间度量。(精度比较高)。

	typedef boost::int_least64_t nanosecond_type;

   当使用默认构造函数建立auto_cpu_timer类的时候,那么开始自动计时,当函数执行完毕的时候,auto_cpu_timer会自动按照格式汇报使用过的时间。

The default format is " %ws wall, %us user + %ss system = %ts CPU (%p%)\n".

 0.017126s wall, 0.015600s user + 0.000000s system = 0.015600s CPU (91.1%)

2.cpu_timer,接口函数定义如下:

 class cpu_timer
    {
    public:

      //  constructor
      cpu_timer() noexcept;
 
      //  compiler generated; shown for exposition only
     ~cpu_timer() noexcept = default; 
      cpu_timer(const cpu_timer&) noexcept = default;
      cpu_timer& operator=(const cpu_timer&) noexcept = default;      

      //  observers
      bool         is_stopped() const noexcept;
      cpu_times    elapsed() const noexcept;
      std::string  format(int places, const std::string& format) const;
      std::string  format(int places = default_places) const;

      //  actions
      void         start() noexcept;
      void         stop() noexcept;
      void         resume() noexcept;
    };
示例代码:

#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <fstream>
#include <boost/timer/timer.hpp>
//#include <windows.h>
//#include <boost/date_time/gregorian/gregorian.hpp>

int main()
{
	boost::timer::cpu_timer t;

	boost::timer::auto_cpu_timer t2;

	t2.report();//不需要析构,直接汇报经历过的时间。
	
	t.start();//启动开始计时
	t.resume();//重新开始计时,并返回之前的cpu_timer。
	std::string s = t.format();//默认格式,也可以自己设置。
	std::cout<<s;
	t.stop();//停止计时。
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值