Как работает _ftime / внутреннее время Windows?
Вопрос
Я обнаружил интересную проблему в 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. Просто прочитайте исходный код.