как мы можем работать с таймером в миллисекундах (0,001), как мы можем разделить секунду, как мы хотим ?? как мы могли бы иметь дело со вторым ???
как функция time() сообщает текущее время и даже когда компьютер был выключен ранее?
Ответы (7)
http://computer.howstuffworks.com/question319.htm
В вашем компьютере (как и в других гаджетах) батарея питает микросхему, называемую микросхемой часов реального времени (RTC). RTC — это, по сути, кварцевые часы, которые работают все время, независимо от того, есть ли у компьютера питание. Батарейка питает эти часы. Когда компьютер загружается, частью процесса является запрос RTC для получения правильного времени и даты. Такие маленькие кварцевые часы могут работать от пяти до семи лет от маленькой батарейки. Тогда пришло время заменить батарею.
На вашем ПК будут установлены аппаратные часы, питающиеся от батареи, чтобы они продолжали тикать, даже когда компьютер выключен. ПК знает, как быстро идут его часы, поэтому он может определить, когда проходит секунда.
Первоначально ПК не знает, который сейчас час (т. е. он просто начинает отсчет с нуля), поэтому ему необходимо сообщить, какое сейчас время — это можно установить в файле настройки BIOS и хранится в 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 описывает их невероятно подробно.