Вопрос

Я обнаружил интересную проблему в Windows, которая позволяет заставить часы Windows (но не аппаратные часы) работать быстро - целых 8 секунд каждую минуту. Я делаю некоторые предварительные исследования, чтобы выяснить, как Windows вычисляет и обновляет свое внутреннее время (а не как оно синхронизируется с NTP-серверами). Будем весьма благодарны за любую информацию, которая есть у кого-либо, или за любые документы, на которые вы можете указать мне.

Кроме того, если кто-нибудь знает, как работает _ftime, сообщите мне.

Это было полезно?

Решение

Эта статья MSDN дает очень краткое описание того, как обрабатывается системное время: " при первом запуске системы оно устанавливает системное время в значение на основе часов реального времени компьютера, а затем регулярно обновляет время. " ; Еще одна интересная функция - GetSystemTimeAdjustment , в которой говорится следующее:

  

Значение TRUE [для lpTimeAdjustmentDisabled] указывает, что периодическая регулировка времени отключена. При каждом прерывании часов система просто добавляет интервал между прерываниями часов к часам времени суток. Однако система может свободно настраивать время суток, используя другие методы. Такие другие методы могут привести к заметному скачку часов времени, когда будут сделаны корректировки.

Наконец, что касается _ftime, он, похоже, реализован с использованием GetSystemTimeAsFileTime . Таким образом, он будет напрямую связан с теми же встроенными средствами времени, которые будут использоваться везде.

Другие советы

Относительно того, как _ftime() работает:

Если у вас установлен Microsoft Visual C ++, возможно, у вас также установлен источник среды выполнения C. %ProgramFiles%\Microsoft Visual Studio <version>\VC\crt\src\ftime.c определено в ftime64.c и <=>.

_ftime вообще не использует GetSystemTimeAsFileTime. Просто прочитайте исходный код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top