目录
一、概述
二、时钟(Clocks)
三、duration:表示时间间隔
1. 定义
2. 常用别名
3. 运算与转换
四、time_point:表示时刻
1. 定义
2. 构造与置零
3. 运算
五、定时与线程睡眠
六、格式化与解析(C++20 起)
七、实践建议
下面对 C++ 标准库中 duration与time_point基础、常用别名、运算与转换、定时与睡眠、格式化/解析,以及实践建议。
一、概述
。
核心概念围绕两大模板类:
std::chrono::duration:表示一段时间长度(例如 3.5 秒、100 毫秒)
std::chrono::time_point:表示某一时刻,相对于特定时钟的纪元(epoch)
配合若干时钟(Clock)
类型,可进行高精度测时、定时、时间点运算、跨平台的线程睡眠等。
二、时钟(Clocks)
时钟类型说明精度单调性system_clock与系统实时时钟对应,可转换为日历时间(time_t)
操作系统定义非单调steady_clock单调、不可回拨,适合测量间隔,不受系统时间调整影响实现定义单调high_resolution_clock提供最高可用精度(通常是 steady_clock 或 system_clock)
实现定义取决于底层时钟using namespace std::chrono;auto t0 = steady_clock::now();// …执行某些耗时操作…
auto t1 = steady_clock::now();auto elapsed = t1 - t0; // 类型为 steady_clock::duration
三、duration:表示时间间隔
1. 定义
templateRep:底层数值类型(如 int64_t、double)
Period:刻度单位,以分数形式表示:std::ratio<1,1000> → 毫秒std::ratio<60> → 分钟std::nano/micro/milli/ratio<1>/kilo…
2. 常用别名
using nanoseconds = duration
3. 运算与转换
加减乘除:对同种或可转换 duration 之间可直接相加、相减;也可乘以/除以标量。
duration_cast
std::chrono::abs(d)(C++20)取绝对值。
auto d1 = 1500ms; // milliseconds auto d2 = 1s + 500ms; // 1500ms auto d3 = duration_cast
四、time_point:表示时刻
1. 定义
templateClock::duration:决定了 time_point 的底层精度以时钟的纪元(epoch)为参考,例如 system_clock 通常以 UNIX 纪元 (1970-01-01)
2. 构造与置零
system_clock::time_point t0; // 默认构造:epoch auto t1 = system_clock::now(); // 当前时刻
3. 运算
加减 duration:tp + d 或 tp - d 得到新的 time_point差值:t2 - t1 得到 duration比较:支持 <,>,== 等auto expire = t1 + 5min; // 5 分钟后if (system_clock::now() < expire) { … }auto wait = expire - system_clock::now(); // duration
五、定时与线程睡眠
std::this_thread::sleep_for(dur):阻塞当前线程持续指定 duration std::this_thread::sleep_until(tp):阻塞至指定 time_point#include
std::cout << "Sleeping for 500ms...\n";std::this_thread::sleep_for(500ms);std::cout << "Awake!\n";精度取决于操作系统调度与底层时钟,通常不保证毫秒级精确唤醒。
六、格式化与解析(C++20 起)
C++20 增加了对日历与格式化的支持,位于或+。
#include
auto now = system_clock::now();auto dp = floor
七、实践建议
测时请用 steady_clock避免系统时间调整的影响;high_resolution_clock 也可,但需确认其是否单调。
存储/序列化用 system_clock与现实世界时间对应,可转换为/自 time_t,与外部系统交互友好。
慎用 duration_cast 截断若需四舍五入,手动加半个单位再截断,或用浮点 duration
避免睡眠“过度”依赖精度sleep_for 可能比请求时间更长;对高精度实时控制,应配合忙等或操作系统定时器 API。
利用 C++20 日历库对日期运算(加月、验证闰年等)请使用 year_month_day 等类型,胜过手写 tm 计算。
类型安全与可读性使用字面量(100ms, 2h)和 using namespace std::chrono_literals,代码简洁且避免单位混淆。
通过以上对
到此这篇关于C++ 标准库 <chrono>的具体使用的文章就介绍到这了,更多相关C++ <chrono>内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:从入门到精通C++11 <chrono> 库特性
