2

std::this_thread::sleep_for(std::chrono::seconds(1));用来睡一秒钟。我发现如果我在睡眠期间向后调整系统时间,睡眠时间会延长我刚刚调整的时间。

但是std::this_thread::sleep_for()应该不管系统时间如何都可以工作,不像std::this_thread::sleep_until(),它可能应该表现出上面提到的行为。

当我查看 Visual C++ 2012 的实现时std::this_thread::sleep_for(),我发现

template<class _Rep,
class _Period> inline
void sleep_for(const chrono::duration<_Rep, _Period>& _Rel_time)
{   // sleep for duration
stdext::threads::xtime _Tgt = _To_xtime(_Rel_time);
sleep_until(&_Tgt);
}

因此在 Visual C++ 2012 中sleep_for()使用实现sleep_until()。我搜索了 C++11 标准,它并没有真正禁止这种实现。那么如何才能在不受系统时钟调整影响的固定时间段内入睡呢?

4

1 回答 1

0

您可能应该使用计时器队列,这些是精确的相对计时器。要使计时器可等待,请让您的计时器例程触发一个事件,如本例所示

于 2013-11-01T13:17:52.513 回答