как функция time() определяет текущее время и даже когда компьютер был выключен ранее?

StackOverflow https://stackoverflow.com/questions/973524

  •  13-09-2019
  •  | 
  •  

Вопрос

как мы можем работать с таймером, рассчитанным на миллисекунды (0,001), как мы могли бы разделить секунду так, как мы хотим??как мы могли бы справиться с самим вторым ???

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

Решение

http://computer.howstuffworks.com/question319.htm

В вашем компьютере (а также в других устройствах) батарея питает микросхему , называемую чипом часов реального времени (RTC).RTC - это, по сути, кварцевые часы которые работают все время, независимо от того, включен компьютер или нет .Аккумулятор питает эти часы.Когда компьютер загружается, частью процесса является запрос RTC для получения правильного времени и даты.Маленькие кварцевые часы вроде они могут работать от пяти до семи лет от небольшой батарейки.Тогда пришло время заменить батарею.

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

Ваш компьютер будет иметь аппаратные часы, питается от аккумулятора, так что он продолжает тикать, даже когда компьютер выключен.Компьютер знает, с какой скоростью работают его часы, поэтому он может определить, когда проходит секунда.

Изначально КОМПЬЮТЕР не знает, который сейчас час (т.е.он просто начинает отсчет с нуля), поэтому необходимо указать текущее время - это можно установить в БИОС настройки и хранится в CMOS - матрица, или могут быть получены через Интернет (например,путем синхронизации с часами в NIST).

Небольшое резюме и еще немного информации:

1) Компьютер считывает часы реального времени во время загрузки и использует их для настройки своих внутренних часов

2) С этого момента компьютер использует только тактовую частоту своего процессора - он не перечитывает RTC (обычно).

3) Внутренние часы компьютера подвержены дрейфу - из-за тепловой нестабильности, колебаний мощности, неточностей в определении точного делителя секунд, задержки прерывания, космических лучей и фазы Луны.

4) Величина смещения часов может составлять порядка секунд в день (десятки или сотни секунд в месяц).

5) Большинство компьютеров способны подключаться к серверу времени (через Интернет) для периодического сброса своих часов.

6) Использование сервера времени может увеличить точность с точностью до десятков миллисекунд (обычно).Мой компьютер обновляется каждые 15 минут.

Компьютеры знают время, потому что, как и у вас, у них есть цифровые часы, на которые они время от времени смотрят.

Когда вы приобретаете новый компьютер или переезжаете в новую страну, вы можете установить эти часы, или ваш компьютер может запросить в Интернете, который час, что поможет остановить его от замедления или ускорения.

Как пользователь компьютера, вы можете спросить текущее время или попросить компьютер включить будильник.Некоторые компьютеры могут даже включаться сами в определенное время, чтобы создать резервную копию или разбудить вас любимой мелодией.

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

Компьютер может установить будильник на несколько миллисекунд в будущем и обычно делает это, чтобы знать, когда следует перестать думать о вашей почтовой программе и потратить некоторое время на размышления о вашем веб-браузере.Затем он устанавливает другой будильник, чтобы знать, что нужно вернуться к вашей электронной почте через несколько миллисекунд.

Как программист, вы тоже можете использовать это средство, например, вы могли бы установить ограничение по времени для уровня в игре, используя "таймер".Или вы могли бы использовать таймер, чтобы указать, когда следует выводить на дисплей следующий кадр анимации - возможно, 25 раз в секунду (то есть каждые 40 миллисекунд).

Чтобы ответить на главный вопрос, часы BIOS имеют батарею на вашей материнской плате, как говорится в ответе Цзянь.Это сохраняет время, когда машина выключена.

Чтобы ответить на, как я думаю, ваш второй вопрос, вы можете получить секунду из значения миллисекунды, выполнив целочисленное деление на 1000, вот так:

second = (int) (milliseconds / 1000);

Если вы спрашиваете, как нам удается засекать время с такой точностью, посмотрите на ответ Эстебана...кристалл кварца вибрирует в течение определенного периода времени, скажем, 0,00001 секунды.Мы просто создаем схему, которая подсчитывает вибрации.Когда мы достигаем 100000 вибраций, мы объявляем, что прошла секунда, и обновляем часы.

Мы можем получить любую точность, подсчитав вибрации таким образом...любая точность, превышающая период вибрации используемого нами кристалла.

На материнской плате есть часы, которые тикают.Каждый тик представляет собой единицу времени.

Если быть более точным, часы обычно представляют собой кристалл кварца, который колеблется с заданной частотой;некоторые распространенные тактовые частоты процессора составляют 33,33 и 40 МГц.

Абсолютное время архаично измеряется с использованием 32-битного счетчика секунд 1970 года.Это может вызвать "проблему 2038 года", когда она просто переполняется.Отсюда 64-разрядные временные API, используемые на современных платформах Windows и Unix (включая macOS на базе BSD).

Довольно часто пользователя ПК интересуют временные интервалы, а не абсолютное время, прошедшее с тех пор, как произошло важное событие.В обычной реализации компьютера есть вещи, называемые таймерами, которые позволяют именно этому произойти.Эти таймеры могут запускаться даже тогда, когда компьютер не используется для опроса оборудования о состоянии пробуждения, переключения режимов сна или выхода из спящего режима.Документы Intel по процессорам содержат невероятные подробности об этом.

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