Сообщение от wellcom
|
|
Не могли бы помочь примерчиком начинающему программисту, как на таймере строить? А если таймеры нужно использовать под другие задачи?
|
Один таймер в системе нужно почти всегда выделять под системные тики.
Дискретность тиков выбирать между наименьшим "торможением" системы и наилучшей дискретностью.
Желательно приблизить к минимальному значению ожидаемых задержек.
Грубо говоря (как вариант, готовых решений не даю, бесполезно, задачи и системы разные):
Настроить системный таймер на 1 прерывание в выбранный интервал времени (скажем 1 мсек).
В теле обработчика прерывания от системного таймера вводите декремент переменной (обязательно volatile!, размерность определите задачей) по условию неравенства ее нулю.
Сколько надо таких переменных и их размерности решайте сами.
Далее вариант блокирующего таймера (таймера, останавливающего все остальные процессы, как наиболее простой для понимания вариант):
Пишите функцию, получающую значение задержки из любой точки программы.
Присваиваете значение задержки переменной внутри таймера.
Зависаете в цикле до обнуления этой переменной.
Выходите из функции.
Неблокирующие задержки строятся весьма разнообразно, с применением различных механизмов (семафоры, стеки и прочее). В основном это может понадобится для работы с несколькими потоками задач, т.к. не будет необходимости "висеть" в ожидании окончания отсчета тиков. Но нужно будет предусматривать механизм сообщения в поток о прекращении отсчета. Освойте пока блокирующую систему. Остальное по вкусу.

Готовый "примерчик" привести почти невозможно. Поймите механизм и наваяйте под свои условия.
И не забывайте, что это лишь один из способов. Сколько программистов - столько и решений.