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));
}, "任务函数耗时");