在开发过程中,经常会遇到需要计算某个方法的时间耗时,一般的操作是在开始和结束的时候分别设置上时间戳,这样需要每次都定义,比较麻烦,可以尝试插入一个记录时间的对象,利用对象的创建和析构时间计算出来方法的耗时。
1. 定义记录耗时的类
#include <iostream>
#include <chrono>
/**
* 记录耗时
*/
class TimerCost {
public:
TimerCost(const char *name) : m_Name(name), m_Stopped(false) {
m_StartTime = std::chrono::high_resolution_clock::now();
}
~TimerCost() {
if (!m_Stopped) {
stop();
}
}
void stop() {
auto endTime = std::chrono::high_resolution_clock::now();
long long start = std::chrono::time_point_cast<std::chrono::microseconds>(
m_StartTime).time_since_epoch().count();
long long end = std::chrono::time_point_cast<std::chrono::microseconds>(
endTime).time_since_epoch().count();
auto duration = end - start;
double ms = duration * 0.001;
std::cout << m_Name <<" 耗时:" << ms<< " 毫秒" << std::endl;
m_Stopped = true;
}
private:
const char *m_Name;
bool m_Stopped;
std::chrono::time_point<std::chrono::steady_clock> m_StartTime;
};
2. 使用操作
#include "TimerCost.h"
#include <chrono>
#include <thread>
void simulateTimeConsumingTask()
{
// 定义一个记录耗时的对象,在方法结束时,自动析构
TimerCost timer(__FUNCTION__);
std::cout << "开始模拟耗时任务..." << std::endl;
// 休眠5秒钟
std::this_thread::sleep_for(std::chrono::seconds(5));
std::cout << "模拟耗时任务完成!" << std::endl;
}
int main() {
simulateTimeConsumingTask();
return 0;
}