Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
Шрифт:
1. Создать объект типа «таймер».
2. Выбрать схему уведомления (сигнал, импульс или создание потока) и создать структуру уведомления (
3. Выбрать нужный тип таймера (относительный или абсолютный, и однократный или периодический).
4. Запустить таймер.
Давайте теперь рассмотрим все это по порядку.
Создание таймера
Первый этап — это создание таймера с помощью функции timer_create:
Аргумент clock_id
• CLOCK_REALTIME
• CLOCK_SOFTTIME
• CLOCK_MONOTONIC
Сигнал, импульс или поток?
Оставим пока на время варианты CLOCK_SOFTTIME и CLOCK_MONOTONIC, поскольку они еще пока (на момент написания книги — прим. ред.) не реализованы. Втором параметром является указатель на структуру
Итак, мы вызываем функцию timer_create с временным базисом CLOCK_REALTIME и указателем на структуру
На этот момент никаких событий пока не происходит. Вы просто создали таймер, но ведь вы еще не включали его.
Какой таймер выбрать?
Создав таймер, теперь вы должны решить, какого типа будет этот таймер. Это осуществляется путем комбинирования аргументов функции timer_settime, которая обычно применяется для собственно запуска таймера:
Аргумент timerid — это число, которое вы получите обратно по вызову функции timer_create. Вы можете создать множество таймеров, а затем вызывать timer_settime для них по отдельности, когда вам это будет необходимо.
С помощью аргумента flags вы определяете тип таймера — абсолютный или относительный.
Если вы передаете константу TIMER_ABSTIME, получается абсолютный таймер, как вы и могли бы предположить. Затем вы передаете реальные дату и время срабатывания таймера.
Если вы передаете нуль, таймер предполагается относительным.
Давайте посмотрим, как определяется время. Вот ключевые фрагменты двух структур данных из
В
it_value | однократно используемое значение |
it_interval | перезагружаемое значение |
Параметр it_value задает либо интервал времени от настоящего момента до момента срабатывания таймера (в случае относительного таймера), либо собственно время срабатывания (в случае абсолютного таймера). После срабатывания таймера значение величины it_interval задает относительное время для повторной загрузки таймера, чтобы он мог сработать снова. Заметим, что задание для it_interval нулевого значения преобразует данный таймер в однократный. Вы можете предположить, что чтобы создать «исключительно периодический» таймер, вам следует установить параметр it_interval в значение интервала перезагрузки, а параметр it_value — в нуль. К сожалению, последнее неверно — установка параметра it_value в нуль выключает таймер. Если вы хотите создать «исключительно периодический» таймер, присвойте it_value и it_interval одинаковые значения и создайте таймер как относительный. Такой таймер сработает один раз (с задержкой it_value), а затем будет циклически перезагружаться с задержкой it_interval.
Оба параметра it_value и it_interval фактически являются структурами типа
Несколько примеров:
Это сформирует однократный таймер, который сработает через 5,5 секунды. (5,5 секунд складывается из 5 секунд и 500,000,000 наносекунд.)
Мы предполагаем здесь, что этот таймер используется как относительный, потому что если бы это было не так, то его время срабатывания уже давно бы его истекло (5.5 секунд с момента 00:00 по Гринвичу, 1 января 1970).
Другой пример:
Данная комбинация параметров сформирует однократный таймер, который сработает в четверг, 19 апреля 2001 года в 00:25:21 по EDT. (Существует множество функций, которые помогут вам преобразовать воспринимаемый человеком интервал времени в «число секунд, истекшее с 00:00:00 по Гринвичу, 1 января 1970 года». См. функции time, asctime, ctime, mktime, strftime, и т.д.).
Стеллар. Трибут
2. Стеллар
Фантастика:
боевая фантастика
рпг
рейтинг книги
Его огонь горит для меня. Том 2
2. Мир Карастели
Фантастика:
юмористическая фантастика
рейтинг книги
На границе империй. Том 9. Часть 4
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
рейтинг книги
Наследник
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
рейтинг книги
