当前位置: 首页 > news >正文

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

相关文章:

  • MCP协议驱动的全自动光催化甲烷偶联实验平台构建及实现方案
  • 【论文推荐|深度学习,冰川测绘,遥感,青藏高原】SAU-Net: 基于多源遥感数据的冰川制图深度学习方法(二)
  • 每日定投40刀BTC(14)20250409 - 20250419
  • windows11安装jitsi-meet视频会议系统
  • 如何使用flatten函数在Terraform 中迭代嵌套map
  • 演讲比赛流程管理项目c++
  • 网络互连与互联网4
  • python基础知识点(3)
  • Lambda 表达式的语法结构
  • 20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤
  • 怎么查看LLM Transformer 架构进行并行计算和设备映射
  • Python基础总结(七)之条件语句
  • 多线程和线程同步
  • Pandas取代Excel?
  • 交换排序——快速排序
  • opencv 图像的旋转
  • mysql的函数(第一期)
  • 简单线段树的讲解(一点点的心得体会)
  • 动态规划算法:状态压缩
  • 【python编程从入门到到实践】第二章 变量和简单的数据类型
  • 诺奖得主等数十位经济学家发表宣言反对美关税政策
  • 女子伸腿阻止列车关门等待同行人员,被深圳铁路警方行政拘留
  • 普京宣布临时停火30小时
  • 鲁比奥称“美或退出俄乌谈判”,欧洲官员:为了施压乌克兰
  • 黄金投资热,成了“财富焦虑”的贩卖场
  • 亚洲大厦和一个被音乐剧改变的街区