std::this_thread::sleep_for 实现取决于系统时钟

问题描述 投票:0回答:1

我遇到的问题是

std::this_thread::sleep_for
实际上使用系统时钟来计算唤醒时间(至少在Windows上),而不是稳定时钟。当系统时钟更改时,这会产生问题。例如。如果我有一个等待间隔很短(例如 50 毫秒)的等待循环,然后我将系统时钟向后设置 2 分钟,则循环将停止 2 分钟而不是 50 毫秒。这是违反直觉的。我预计它是 50 毫秒(+一些小偏差)。在任何其他情况下,如果可以在随机时间唤醒,则此功能没有意义。

关于

sleep_for
函数的文档说可以使用系统时钟,但我认为这是标准中的一个缺陷。至少应该可以选择要使用的时钟类型。或者(更好)标准应该要求时钟稳定。

那么,考虑到这样的缺陷,你知道还有其他与平台无关的方式来睡眠一定的时间吗?

c++ windows c++11
1个回答
2
投票

解决此问题的拉取请求已于 2023 年 10 月 21 日合并。

根据更改日志,它登陆了 VS 2022 17.9,根据博客文章,该版本于 2024 年 2 月首次作为非预览版本发布。

基本上,它直接使用

this_thread::sleep_for
Windows API 函数来制作
Sleep
。因此,早期 VS 的一个可能的解决方法是直接使用它。

同步设施中的其他地方仍然受到此错误的影响,例如

condition_variable::sleep_for
,修复这些问题的PR已合并,因此希望今年该错误能够完全修复。

© www.soinside.com 2019 - 2024. All rights reserved.