当前位置: 首页 > 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));
}, "任务函数耗时");
http://www.dtcms.com/a/143675.html

相关文章:

  • 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编程从入门到到实践】第二章 变量和简单的数据类型
  • Nginx 文件上传大小限制及 `client_max_body_size` 最大值详解
  • Linux 系统盘制作 | 引导加载器(GRUB 为例)| mount
  • 二叉树进阶 - 二叉搜索树
  • PDF转excel+json ,vue3+SpringBoot在线演示+附带源码
  • 宇树机器狗go2—slam建图(1)点云格式
  • MLLMs for TSAD ?
  • 单例模式:懒汉式的两种优化写法
  • 编译报错 宏 _IOC_SIZEBITS,而这个宏在编译时未定义
  • Bash 中的数学运算详解
  • 【每天一个知识点】模式识别