用 std::chrono::high_resolution_clock::now() 获取高精度时间点,性能测量只存 time_point,用 duration_cast 转换差值,转本地时间需经 system_clock 中转。

如何用 std::chrono 获取当前高精度时间点
直接用 std::chrono::high_resolution_clock::now() 是最常用也最可靠的方式,它返回一个 time_point,底层精度取决于系统(Linux 通常纳秒级,Windows 可能是 100ns 级)。别用 system_clock 做性能测量——它可能被系统时钟调整影响,测出来的时间差会跳变。
常见错误:把 now() 结果直接转成 time_t 或打印为字符串来“看时间”,这反而丢精度、加开销。性能测量阶段只该存 time_point,最后再统一转换。
- 不要写
auto t = std::chrono::system_clock::now();测耗时 - 避免在循环里反复调用
.time_since_epoch().count()——先存time_point,结束再算差值 - 跨线程测量时注意:不同 CPU 核心的
high_resolution_clock可能有微小漂移,短于 1μs 的测量慎用
如何计算两个时间点之间的毫秒/微秒差值
用 std::chrono::duration_cast 转换,不是手动除 1000 或 1000000。C++ 的 duration 类型自带单位语义,硬除会丢失类型安全,还容易因整数截断出错。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
auto start = std::chrono::high_resolution_clock::now(); // ... do something ... auto end = std::chrono::high_resolution_clock::now(); <p>auto us = std::chrono::duration_cast<:chrono::microseconds>(end - start); auto ms = std::chrono::duration_cast<:chrono::milliseconds>(end - start); std::cout </:chrono::milliseconds></:chrono::microseconds></p>
注意:duration_cast 默认向下取整(如 1.9ms → 1ms),若需四舍五入,得手动加半格再 cast:
auto ms_rounded = std::chrono::duration_cast<:chrono::milliseconds>(end - start + 500μs);- 用字面量后缀(
ms、us、ns)比写std::chrono::milliseconds(1)更简洁且不易错 - 别对
duration做浮点运算后再 cast——double表示大整数时会丢失精度(比如超过 2⁵³ 的纳秒值)
如何把 time_point 转成可读的本地时间字符串
必须经过 system_clock 中转,因为 high_resolution_clock 不保证和日历时间对齐。直接用 high_resolution_clock::to_time_t 是未定义行为。
high_resolution_clock::time_point
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










