我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 标准,它并没有真正禁止这种实现。那么如何才能在不受系统时钟调整影响的固定时间段内入睡呢?