在咱们写程序过程当中,有时候须要测试咱们的程序语句执行时间的耗时,当前也是有不少的库提供咱们去使用,一直没有良好的跨平台的库能够提供出来;并且通常这种代码也是由咱们程序员本身调用系统的库来进行,可是每每会出现精度不足和不支持跨平台等问题;ios
他来了。。。他来了。。,他踩着七彩祥云来了;“他”就是C++11中引进boost中的chrono库;他可实现高精度时钟,能够作到纳秒级;程序员
在C++11中,是标准模板库中与时间有关的头文件。该头文件中全部函数与类模板均定义在std::chrono
命名空间中;bash
这里主要介绍时间点和时钟两个点:服务器
通常计时器就是从某个时间点开始,而后到某个时间点之间的计数,就是咱们通常称之为耗时;微信
时间点:函数
template <class Clock, class Duration = typename Clock::duration>
class time_point;
复制代码
std::chrono::time_point 表示一个具体时间学习
第一个模板参数Clock用来指定所要使用的时钟,在标准库中有三种时钟,分别为:测试
第二个模板函数参数用来表示时间的计量单位(特化的std::chrono::duration<> )优化
时间点都有一个时间戳,即时间原点。chrono库中采用的是Unix的时间戳1970年1月1日 00:00。因此time_point也就是距离时间戳(epoch)的时间长度(duration)。ui
知道了这些,咱们去实现一下开始说的高精度计时器:
#ifndef _TimerClock_hpp_
#define _TimerClock_hpp_
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
class TimerClock
{
public:
TimerClock()
{
update();
}
~TimerClock()
{
}
void update()
{
_start = high_resolution_clock::now();
}
//获取秒
double getTimerSecond()
{
return getTimerMicroSec() * 0.000001;
}
//获取毫秒
double getTimerMilliSec()
{
return getTimerMicroSec()*0.001;
}
//获取微妙
long long getTimerMicroSec()
{
//当前时钟减去开始时钟的count
return duration_cast<microseconds>(high_resolution_clock::now() - _start).count();
}
private:
time_point<high_resolution_clock>_start;
};
#endif
复制代码
测试:
#include "TimerClock.hpp"
int main()
{
TimerClock TC;
int sum = 0;
TC.update();
for (int i = 0; i > 100000; i++)
{
sum++;
}
cout << "cost time:" << TC.getTimerMilliSec() <<"ms"<< endl;
cout << "cost time:" << TC.getTimerMicroSec() << "us" << endl;
return 0;
}
复制代码
结果:
相似这种比较高精度的测试,咱们可使用在咱们项目代码中进行使用,能够计算出咱们程序的耗时,能够进行优化;
想了解学习更多C++后台服务器方面的知识,请关注: 微信公众号:====CPP后台服务器开发====