h文件:
#ifndef ELAPSEDTIMERECORD_H
#define ELAPSEDTIMERECORD_H
#include <chrono>
///
/// \brief 代码运行耗时录制,精度us级别
///
class ElapsedTimeRecord
{
public:
/// 构造默认开启录制
WBElapsedTimeRecord();
/// 开启录制
void start();
/// 结束录制
void end();
///
/// \brief 获取耗时的时长函数
/// \return -1表示未结束录制
///
qint64 usec();
double msec();
double sec();
///
/// \brief 获取开始录制的时间戳
///
qint64 dateTime();
private:
qint64 startRecordTime {-1}; //ms
qint64 startTime {-1}; //代码开始时的时间戳
qint64 endTime {-1}; //结束时的时间戳
};
#endif // ELAPSEDTIMERECORD_H
cpp文件:
#include "elapsedtimerecord.h"
ElapsedTimeRecord::ElapsedTimeRecord(){ //如果并未传参数,默认构造开始记录
start();
}
void ElapsedTimeRecord::start(){
auto now = std::chrono::system_clock::now();
startTime = now.time_since_epoch().count();
startRecordTime = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
}
void ElapsedTimeRecord::end(){
endTime = std::chrono::system_clock::now().time_since_epoch().count();
}
qint64 ElapsedTimeRecord::usec(){
if(startTime < 0 || endTime < 0) return -1;
return endTime - startTime;
}
double ElapsedTimeRecord::msec(){
if(startTime < 0 || endTime < 0) return -1;
qint64 us = endTime - startTime;
return (double)us/1000;
}
double ElapsedTimeRecord::sec(){
if(startTime < 0 || endTime < 0) return -1;
qint64 us = endTime - startTime;
return (double)us/1000/1000;;
}
qint64 ElapsedTimeRecord::dateTime(){
return startRecordTime;
}
使用方法:
#include <elapsedtimerecord.h>
void func()
{
ElapsedTimeRecord timRecord;
...
your code
...
timRecord.end();
qDebug()<<"[funcName] costTime:"<<timRecord.msec();
}