C++ std::此线程::用于实现的睡眠取决于系统时钟

C++ std::此线程::用于实现的睡眠取决于系统时钟,c++,windows,c++11,C++,Windows,C++11,我遇到的问题是std::this\u thread::sleep\u for实际上使用系统时钟来计算唤醒时间(至少在Windows上),而不是稳定的时钟。当系统时钟改变时,这会产生问题。例如,如果我有一个等待间隔很短(比如50毫秒)的等待环路,然后我将系统时钟设置回2分钟,环路将暂停2分钟而不是50毫秒。这是违反直觉的。我预计是50毫秒(+一些小偏差)。在任何其他情况下,如果可能在随机时间醒来,则此函数没有意义 关于函数的sleep_的文档说明可以使用系统时钟,但我认为这是标准中的一个缺陷。至少

我遇到的问题是
std::this\u thread::sleep\u for
实际上使用系统时钟来计算唤醒时间(至少在Windows上),而不是稳定的时钟。当系统时钟改变时,这会产生问题。例如,如果我有一个等待间隔很短(比如50毫秒)的等待环路,然后我将系统时钟设置回2分钟,环路将暂停2分钟而不是50毫秒。这是违反直觉的。我预计是50毫秒(+一些小偏差)。在任何其他情况下,如果可能在随机时间醒来,则此函数没有意义

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


那么,考虑到这样一个缺陷,您知道有没有其他独立于平台的方式可以在一定时间内睡眠?

只是想澄清一下:当您说“Windows”时,您是指Visual Studio吗?因为标准库实现通常绑定到编译器,而不是目标platform.cppreference.com::标准建议使用稳定的时钟来测量持续时间。如果实现改用系统时钟,则等待时间也可能对时钟调整敏感。这正好解决了你的问题。如果您的平台确实遇到了这个问题(恐怕也是我的问题),那么它的实现很差,或者由于操作系统的限制,无法做得更好。很遗憾,boost::this_thread::sleep_for也有同样的实现。而且它可以在Windows上更好地实现——只需使用系统睡眠功能。