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

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


person Sherif    schedule 10.06.2009    source источник
comment
это Хайку? ...   -  person Mitch Wheat    schedule 10.06.2009
comment
Я думаю, что это законный вопрос; может просто проблемы с языком? Во всяком случае, я пошел дальше и отредактировал.   -  person Esteban Araya    schedule 10.06.2009
comment
Спасибо, я только начинающий.   -  person Sherif    schedule 10.06.2009
comment
@mavric: То, как вы сформулировали вопрос, создавало впечатление, что вы несерьезно относитесь к тому, о чем спрашиваете.   -  person Esteban Araya    schedule 10.06.2009
comment
ответил, я думаю, что необходимо предоставить больше деталей, так как после того, как компьютер загружается и считывает время из RTC, время, насколько я знаю, отслеживается в программном обеспечении и повторно синхронизируется с аппаратными часами только после того, как вы снова выключите питание. Мне нужно объяснить, как это работает на современных машинах с различной нагрузкой и разной скоростью процессора в зависимости от времени.   -  person Kent Fredric    schedule 10.06.2009
comment
@ Кент, ты можешь сам открыть вопрос? Не нужно набирать 5 голосов?   -  person nonopolarity    schedule 10.06.2009
comment
нет, я проголосовал за повторное открытие (всего 5, см. журнал), а затем заявил, что оно было вновь открыто, чтобы другие могли видеть. плохо сформулировано :p   -  person Kent Fredric    schedule 10.06.2009
comment
@Jian: Я не согласен с тем, как вы отредактировали вопрос, по двум причинам: это меняет исходное намерение ОП; компьютер отслеживает время независимо от упомянутой вами функции time(). Тем не менее, я не буду отступать, так как это, вероятно, приведет к войне правок. :)   -  person Esteban Araya    schedule 10.06.2009
comment
со всем возможным уважением, я думаю, мы должны сосредоточиться на одном новом EDIT вопроса, который я добавил туда ^^^^^.   -  person Sherif    schedule 11.06.2009


Ответы (7)


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

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

person nonopolarity    schedule 10.06.2009

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

Первоначально ПК не знает, который сейчас час (т. е. он просто начинает отсчет с нуля), поэтому ему необходимо сообщить, какое сейчас время — это можно установить в файле настройки BIOS и хранится в CMOS или можно получить через Интернет (например, путем синхронизации с часами в NIST). ).

person Jeffrey Kemp    schedule 10.06.2009

Немного резюме и немного дополнительной информации:

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

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

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

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

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

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

person dar7yl    schedule 16.06.2009

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

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

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

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

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

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

person Alex Brown    schedule 16.06.2009
comment
У меня нет цифровых часов. - person Nosredna; 17.06.2009
comment
Маврик делает. Тебе должно быть стыдно. - person Alex Brown; 17.06.2009
comment
Это очень элегантный способ объяснить новичку компьютерный хронометраж. +1 - person Chris McCall; 19.06.2009

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

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

second = (int) (milliseconds / 1000);

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

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

person Sudhir Jonathan    schedule 12.06.2009
comment
во-первых, каков ответ Эстебана? во-вторых, я неправильно понял меня, я спрашиваю о том, как заставить таймер генерировать свое событие каждые 0,001, я не спрашиваю, как его использовать, я спрашиваю о том, как мы это делаем, как я могу свободно делить секунду, как я хочу? - person Sherif; 13.06.2009
comment
ну, если вам нужны части секунды, то используйте соотношение 1 секунда = 1000 миллисекунд... поэтому, если вы хотите 1/2 секунды, это 500 миллисекунд, если вы хотите 1/5 секунды - 200 миллисекунд, 1/10 секунды - 100 миллисекунд и так далее... - person Sudhir Jonathan; 14.06.2009

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

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

person Esteban Araya    schedule 10.06.2009
comment
Тактовая частота реального времени обычно совершенно не связана с тактовой частотой процессора. Чаще всего что-то вроде 32,768 КГц. - person Steve Fallows; 13.06.2009

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

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

person GregC    schedule 17.06.2009