2013-06-21 2 views
2

Я недавно читал о таймерах с высоким разрешением и низким разрешением, и я не совсем понимаю. Как они действуют? Разве они не работают, проверяя внутренние системные часы на компьютерном оборудовании? Если это так, это означает, что более высокое разрешение просто проверяет его чаще, потребляя больше ресурсов?Таймеры с высоким разрешением и таймеры с низким разрешением

Есть ли что-то не так со мной, используя таймер с низким разрешением, и когда этот таймер истекает, начиная таймер с высоким разрешением в течение секунды (или раньше), когда останавливается таймер с высоким разрешением? Или это по какой-то причине не работает?

Как можно больше ресурсов потребляет таймер с высоким разрешением по сравнению с таймером с низким разрешением?

ответ

3

Как правило, таймер с низким разрешением запускает прерывание для процессора каждые х раз (например, каждый 1, 5, 10, 16,6667, 17,81291 или 20 мс - примеры, есть много других значений, которые могут быть). Это используется ОС для переключения задачи, когда задача выполнялась «слишком долго», а также текущее время maint текущего времени, ожидания «выключения времени» и т. Д. (Например, вызов функции функции установил бы себе «время» out "в конце времени сна).

Таймер высокого разрешения, как правило, является аппаратным регистром, который постоянно подсчитывает [вверх или вниз]/обновление на частоте с высоким КГц или выше (например, 32768 Гц, 36 кГц, 12 МГц, 2,2 ГГц - вот лишь некоторые примеры , может быть почти что угодно). Как правило, это используется при «чтении текущего значения», и вы получаете все текущие значения.

Это даст высокие временные значения разрешения, что полезно для измерения коротких интервалов (например, для бенчмаркинга или определения того, сколько времени потребовалось для ответа другого сервера на пинг или какое-то другое небольшое количество времени), но вы не может «ждать 600 мс» с использованием таймера с высоким разрешением - по крайней мере, не пропуская указанный таймер в разы, потому что вы не можете (в типичном случае, который я описываю здесь) сказать «скажите ОС, чтобы запустить эту задачу снова в X число отсчетов ".

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

Имейте в виду, что если вы хотите «точного времени», ОС должна хорошо играть. Большинство современных задач «не любят» ОС, которые просто сидят там и вызывают процессорное время (например, тип опроса «Есть ли у нас еще»), так и другие задачи, связанные с коротким временем выполнения. Это означает, что если у вас есть требования высокой точности времени, ОС должна помочь вам, а не останавливать выполнение вашей задачи, как только она достигнет правильного временного шага. Не зная точно, что вы пытаетесь сделать, трудно сказать, каково правильное решение в вашем случае, tho '.

+0

Я немного смущен, тогда было бы приемлемо сделать таймер с низким разрешением, а затем, когда этот таймер закончит, запустите таймер высокого разрешения, чтобы установить событие, скажем, ровно на 10,761 секунды, когда таймер низкого разрешения начинается, с таймером таймера низкого разрешения на 10, который запускает таймер высокого разрешения для 0,761? – user2462027

+0

Обратите внимание, что вы не можете «ждать» таймера высокого разрешения (если мы говорим аппаратные таймеры). Другими словами, вам нужен цикл, который делает 'while (hr_timer()> x)/* ничего не делать * /;' –

+0

, что я пытаюсь выяснить, как я могу реализовать свои таймеры с высокой точностью и с использованием процессора для таймеров с низким разрешением, это что-то, что можно сделать, или мне всегда нужно взвешивать, важнее ли точность или ресурсы процессора? Также я до сих пор не понимаю, почему я не могу ждать по таймеру с высоким разрешением, что произойдет, если я попытаюсь, что это приведет к тому, что моя идея потерпит неудачу? – user2462027