Разработка приложений в среде Linux. Второе издание
Шрифт:
18.2.2. Интервальные таймеры
Интервальные таймеры, будучи активизированными, непрерывно передают сигналы в процесс на систематической основе. Точное значение термина систематический зависит от используемого интервального таймера. С каждым процессом ассоциированы три таймера.
ITIMER_REAL | Отслеживает время в терминах настенных часов — в реальном времени (в зависимости от выполнения процесса) — и генерирует сигнал SIGALRM. Несовместим с системным вызовом alarm , который используется
sleep . Не применяйте ни alarm , ни sleep , если имеется реальный интервальный таймер. |
ITIMER_VIRTUAL | Подсчитывает время только при исполнении процесса — не учитывая системные вызовы, которые производит процесс — и генерирует сигнал SIGVTALRM . |
ITIMER_PROF | Подсчитывает время только при выполнении процесса — включая время, за которое ядро посылает исполнительные системные вызовы от имени процесса, и не включая время, потраченное на прерывание процесса по инициативе самого процесса — и генерирует сигнал SIGPROF . Учет времени, затраченного на обработку прерываний, оказывается настолько трудоемким, что даже может изменить настройки таймера. |
Комбинация таймеров
Каждый из этих таймеров генерирует ассоциированный сигнал об истечении таймера в пределах одного хода системных часов (как правило, 1-10 миллисекунд). Если процесс работает в данное время, то сигнал генерируется сразу же; в противном случае сигнал генерируется немного позже (в зависимости от загрузки системы). Поскольку таймер
Используйте структуру
Член
Для взаимодействия с интервальными таймерами предусмотрены два системных вызова. Оба принимают аргумент
Переменной
Устанавливает таймер
Если параметр таймера
В следующем примере родительский процесс активизирует дочерний процесс, запускает односекундный таймер
Глава 19
Случайные числа
Слово случайный имеет разный смысл для разных программистов в различное время. Для большинства приложений оказываются достаточно эффективными псевдослучайные числа, предусмотренные библиотекой С. Благодаря тому, что псевдослучайные числа позволяют воспроизводить первоначальные условия, если это необходимо (например, с целью отладки), они оказываются предпочтительнее действительно случайных чисел.