#pragma once
#include <chrono>
#include <string>
#include <iostream>
namespace cho = std::chrono;
//使用高精度计时器
//计时器
class CTimeMeter
{
public:
CTimeMeter() ;
// reset方法
void Reset();
// 输出经过的时间,定义为模板函数
template<typename Duration=cho::milliseconds> // 默认输出毫秒ms
int64_t Elapsed() const
{
return cho::duration_cast<Duration>(cho::high_resolution_clock::now() - m_startTime).count();
}
// 输出微妙
int64_t ElapsedMicroseconds();
// 输出纳秒
int64_t ElapsedNanoseconds();
// 输出秒
int64_t ElapsedSeconds();
// 输出分minute
int64_t ElapsedMinutes();
// 输出时hour
int64_t ElapsedHours();
private:
cho::time_point<cho::high_resolution_clock> m_startTime;
};
//打印使用时间
template<typename Duration=cho::milliseconds>
class DumpUseTime
{
public:
DumpUseTime(const std::string & strMsg):m_msg(strMsg),m_beg()
{
std::cout << m_msg << " 开始" << std::endl;
}
~DumpUseTime()
{
std::cout << m_msg << ",使用时间:" << m_beg.Elapsed<Duration>() << std::endl;
}
private:
CTimeMeter m_beg;
std::string m_msg;
};
#include "TimeMeter.h"
// 构造函数
CTimeMeter::CTimeMeter() : m_startTime(cho::high_resolution_clock::now())
{
}
// reset方法
void CTimeMeter::Reset()
{
m_startTime = cho::high_resolution_clock::now();
}
// 输出微妙
int64_t CTimeMeter::ElapsedMicroseconds()
{
return Elapsed<cho::milliseconds>();
}
// 输出纳秒
int64_t CTimeMeter::ElapsedNanoseconds()
{
return Elapsed<cho::nanoseconds>();
}
// 输出秒
int64_t CTimeMeter::ElapsedSeconds()
{
return Elapsed<cho::seconds>();
}
// 输出分minute
int64_t CTimeMeter::ElapsedMinutes()
{
return Elapsed<cho::minutes>();
}
// 输出时hour
int64_t CTimeMeter::ElapsedHours()
{
return Elapsed<cho::hours>();
}
来源:oschina
链接:https://my.oschina.net/u/3312209/blog/4305413