Я использовал 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);
}
Так sleep_for()
реализуется с использованием sleep_until()
в Visual C ++ 2012. Я искал стандарт C ++ 11, и он не запрещает такую реализацию. Итак, как я могу заснуть в течение фиксированного периода времени, на который не влияют настройки системных часов?
Вы, вероятно, должны использовать очереди таймера это точные относительные таймеры. Чтобы сделать таймер ожидаемым, подпрограмма таймера должна вызвать событие, как в этот пример.
Других решений пока нет …