精确测试执行一个函数所需时间

精确测试执行一个函数所需时间

c++11 新增了 std::chrono library

包含了三种时钟

  1. system_clock 系统时钟
  2. steady_clock 稳定时钟 (单调时钟) 绝不会调整的
  3. high_resolution_clock 高分辨率时钟

三种结构体的主要参数

	//部分源码
	/**
     *  @brief System clock.
     *
     *  Time returned represents wall time from the system-wide clock.
    */
    struct system_clock
    {
      typedef chrono::nanoseconds                                duration;	//纳秒
      typedef duration::rep                                      rep;		//时钟类型
      typedef duration::period                                   period;	//时钟周期
      typedef chrono::time_point<system_clock, duration>         time_point;//时间点
    };

 	/**
     *  @brief Monotonic clock
     *
     *  Time returned has the property of only increasing at a uniform rate.
    */
    struct steady_clock
    {
      typedef chrono::nanoseconds                                 duration;
      typedef duration::rep                                       rep;
      typedef duration::period                                    period;
      typedef chrono::time_point<steady_clock, duration>          time_point;
    };

   /**
     *  @brief Highest-resolution clock
     *
     *  This is the clock "with the shortest tick period." Alias to
     *  std::system_clock until higher-than-nanosecond definitions
     *  become feasible.
    */
    using high_resolution_clock = system_clock;
	/*类似上一句*/
    typedef system_clock high_resolution_clock;

要想精确的计算出一个函数的运行时间.所选的时钟就不能因为部分外部因素影响(例如人为修改系统时间,或者修改硬件时钟)

当我们需要知道一个函数的执行时间的时候,只需要记录2个时间点.

例如startRunTimeendTime只需要记录2个时间点的差值就可以算来。

steady_clock 使用的是系统的单调时间,即从某个时间点开始到未来的时间。用户不能修改这个时间, 严格来说这个获取的 jiffies的值(为自操作系统启动以来的时钟滴答的数目)

#include <iostream>
#include <chrono>

using namespace std;
class StopWatch {
	public:
    	typedef std::chrono::steady_clock clock;
        //利用类的创建调用构造函数初始化一个是时间点
        StopWatch() : start(clock::now()) {}
    	//获取开机到现在执行多少秒
		void startUptimeSec() {
       		std::cout<<"开机多久="<<std::chrono::duration_cast<std::chrono::seconds>(start.time_since_epoch()).count()<<"秒"<<std::endl;
        }
    	long elapsedMs() {     
    		return std::chrono::duration_cast<std::chrono::milliseconds>(
        		clock::now() - start).count();
		}
        ~StopWatch() {
       		std::cout<<"运行时间="<<std::chrono::duration_cast<std::chrono::seconds>(clock::now() - start).count()<<"秒"<<std::endl;
        }
	private:
    	clock::time_point start;
};
//巧妙的运用类的构造.与析构打印出开与结束时间

游戏服务器学习


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值