C++中chrono计时器的简单使用示例
在 C++ 中进行计时(benchmark、函数运行时间、程序耗时分析)非常常见,推荐使用 C++11 引入的 <chrono> 标准库,它简洁、跨平台、类型安全。
推荐方使用 <chrono> 标准库
 
#include <iostream>
#include <chrono>
#include <thread>  // 仅用于演示延迟int main() {// 获取起始时间点auto start = std::chrono::high_resolution_clock::now();// 模拟耗时任务std::this_thread::sleep_for(std::chrono::milliseconds(123));// 获取结束时间点auto end = std::chrono::high_resolution_clock::now();// 计算耗时,单位为毫秒auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);std::cout << "耗时: " << duration.count() << " ms" << std::endl;return 0;
}
 
支持的常见时间单位
| 单位类型 | 表达方式 | 
|---|---|
| 秒 | std::chrono::seconds | 
| 毫秒 | std::chrono::milliseconds | 
| 微秒 | std::chrono::microseconds | 
| 纳秒 | std::chrono::nanoseconds | 
只需更改 duration_cast 的类型即可:
std::chrono::duration_cast<std::chrono::microseconds>(end - start);
 
封装一个简单 Timer 类
class Timer {
public:Timer() { reset(); }void reset() {start_time = std::chrono::high_resolution_clock::now();}double elapsedMilliseconds() const {return std::chrono::duration<double, std::milli>(std::chrono::high_resolution_clock::now() - start_time).count();}double elapsedSeconds() const {return std::chrono::duration<double>(std::chrono::high_resolution_clock::now() - start_time).count();}private:std::chrono::high_resolution_clock::time_point start_time;
};
 
使用方式:
Timer t;
// ... some work
std::cout << "耗时: " << t.elapsedMilliseconds() << " ms" << std::endl;
 
进阶用法:用于函数运行时间统计
template<typename Func>
void benchmark(Func f, const std::string& name = "Function") {auto start = std::chrono::high_resolution_clock::now();f();auto end = std::chrono::high_resolution_clock::now();double ms = std::chrono::duration<double, std::milli>(end - start).count();std::cout << name << " 执行耗时: " << ms << " ms\n";
}
 
调用示例:
benchmark([](){std::this_thread::sleep_for(std::chrono::milliseconds(200));
}, "任务函数耗时");
