std::chrono::duration默认时钟类型是什么?系统休眠后等待行为如何?
C++ condition_variable wait_for 相关问题解答
关于std::chrono::milliseconds的时钟类型
std::chrono::milliseconds 是时间间隔(duration)类型,它本身并不绑定任何时钟类型。时钟(如steady_clock、system_clock)用于标记具体时间点,而duration仅表示两个时间点之间的差值。
当你将std::chrono::milliseconds(10000)传入cv.wait_for时,该函数会默认使用**std::chrono::steady_clock**(单调时钟)计算超时逻辑——以调用wait_for的时刻为起点,等待10秒物理时间后触发超时。
系统休眠后的等待行为
若计划等待10秒,运行2秒后系统进入长时间休眠,唤醒后会继续等待剩余的8秒。
原因是cv.wait_for依赖单调时钟计时,这种时钟的时间只会单调递增,不受系统休眠、系统时间调整(如手动修改时间、NTP同步)的影响,它测量的是实际流逝的物理时间。系统休眠的时间段不会被计入已等待时长,因此唤醒后会补足剩余的等待时间。
内容的提问来源于stack exchange,提问作者yanran
相关产品推荐
相关产品推荐

