2015-03-20 2 views
10

Я прочитал этот ответ где-то, но я не понимаю, это точно:Как работают часы в Windows 7?

Я понимаю, увеличивает Windows, часы каждые curTimeIncrement (156001 100 наносекунд) со значением curTimeAdjustment (156001 + - N). Но когда часы считываются с использованием GetSystemTime, выполняется ли интерполяция в интервале 156001 наносекунд * 100 до , чтобы определить указанную точность?

Может кто-нибудь попытается объяснить это мне?

Что такое curTimeIncrement, curTimeAdjustment и как это сделать Windows?

Что может повлиять на это при получении точного времени?

Это правда только для окон 7 или других ОС Win8, Linux и т. Д.?

ответ

27

Он ссылается на значения, возвращаемые GetSystemTimeAdjustment() на Windows. Он сообщает вам, как настроить часы, чтобы догнать или замедлить, чтобы соответствовать реальному времени. «Реальные», являющиеся временем, хранящимся в институте, таком как NIST в США, имеют атомные часы, точность которых намного выше, чем часы, встроенные в вашу машину.

Часы реального времени (RTC) в вашей машине имеют ограниченную точность, побочный эффект от доступности аппаратного обеспечения, который, как правило, отключается на несколько секунд каждый месяц. Поэтому периодически операционная система контактирует с сервером времени через Интернет, time.windows.com - это общий выбор в Windows. Это говорит о текущем реальном времени в соответствии с оракулом атома.

Неточность RTC не является единственным источником дрейфа, иногда реальное время изменяется намеренно. Добавление второго значения для повторной синхронизации часов с истинным вращением Земли. Текущий день (24 x 60 x 60 секунд) немного короче, вращение Земли замедляется на ~ 1,5 мсек в каждом столетии и обычно нерегулярно из-за больших штормов и землетрясений. Вложенные секунды прыжка компенсируют это. Последний был добавлен 30 июня этого года в 23:59:60 UTC. 60 не является опечаткой :)

. До этого было 30 июня 2012 года. Немного известно, что вставка второго прыжка разбила много серверов Linux. Google «Linux прыжок второй баг», чтобы узнать больше об этом.

В общем, что такое механизм под GetSystemTimeAdjustment() пытается избежать, мгновенное изменение времени со значением, полученным с сервера времени, очень опасно. Программное обеспечение часто имеет твердое предположение, что время прогрессирует неуклонно и неправильно, когда это не так. Подобно наблюдению в то же время дважды, когда часы установлены назад. Или соблюдение поддельного времени, например, 23:59:60 UTC из-за второй вставки.

Так что это не так, часы обновляются 64 раза в секунду при прерывании тактового сигнала. Или, другими словами, 1/64 = 0,015625 между тиками, 156250 в наносекундах * 100 единиц. Если необходимо выполнить настройку часов, это не просто добавляет 156250, но немного больше или меньше. Таким образом, медленная синхронизация часов с истинным временем и предотвращение опрокидывания программного обеспечения.

Это, конечно, имеет неприятный побочный эффект на программное обеспечение, которое красит часы. Очевидный способ сделать это - использовать таймер в одну секунду. Но иногда это не секунда, это не будет, когда идет корректировка времени.Затем вступает в игру теорема выборки Найквиста, иногда таймер не обновляет часы вообще или пропускает секунду. Примечательно, что это не Причина, по которой трудно сохранить расписанные часы точными, само уведомление таймера также задерживается. Побочное действие программного обеспечения, которое не может мгновенно выполнить. Это на самом деле гораздо более вероятный источник проблем, настройка часов - это просто обледенение на торт, который легче понять.

Неудобная проблема, г-н Найквист научил нас, что вам нужно чаще выбирать, чтобы устранить нежелательные эффекты наложения. Поэтому обходным путем является просто установить таймер с небольшим интервалом, например, 15 или 31 миллисекунды, достаточно короткий для того, чтобы пользователь больше не наблюдал отсутствующее обновление.

+0

Хммм. Это означает, что если программное обеспечение обрабатывает музыку, вы не можете полагаться на системные часы вообще (профессионал услышит изменение темпа). Вероятно, музыка не является единственным доменом, чувствительным к изменению скорости, но не чувствительным к ошибке второго месяца. – 18446744073709551615

+1

Несомненно, поэтому это делается в аппаратных средствах. Ваша звуковая карта (чип в эти дни) позаботится об этом своими часами. Он не регулируется, он должен быть стабильным, а не точным. –

Смежные вопросы