项目

一般

简介

行为

错误 #443

打开

system_clock vs steady_clock

李立奎4 个月 之前添加.

状态:
新建
优先级:
普通
指派给:
-
开始日期:
2025-09-22
计划完成日期:
% 完成:

0%

预期时间:
#2:

描述

system_clocksteady_clock 都是 <chrono> 提供的“时钟”,但设计目的、行为、可调整性完全不同。
一句话区分:

system_clock 是“墙上的挂钟”,steady_clock 是“跑表”。


对比表

特性 system_clock steady_clock
是否单调 否,可能回拨(NTP、用户手动改时间) 是,保证永不回拨
是否可调 是,系统管理员/NTP 可改 否, 不可调,独立基准
是否映射到物理时间 是,对应日历/UTC 时间 否, 只保证相对间隔
常用用途 获取“现在几点” 计时、性能测试
epoch 定义 1970-01-01 00:00:00 UTC 未规定(通常是开机或某固定点)
精度 实现相关,通常 μs~ns 实现相关,通常 μs~ns

代码级差异

using namespace std::chrono;

auto t0_sys = system_clock::now();   // 可映射到 time_t / 日历
auto t0_stead = steady_clock::now(); // 只能做差值

// 示例:测量函数耗时
auto t1 = steady_clock::now();
foo();
auto t2 = steady_clock::now();
cout << duration_cast<milliseconds>(t2 - t1).count() << " ms\n";

易错点

  1. system_clock 做性能计时
    → 用户中途改系统时间,结果出现负值或巨大值
  2. steady_clock 生成时间戳
    → 无法转成 time_t没有日历意义

一句话总结

你要做的事 选哪个
打印当前日期时间 system_clock
测量代码耗时、定时器 steady_clock

没有任何数据可供显示

行为

导出 Atom PDF