ОБЗОР
#include <time.h>
int timer_getoverrun(timer_t timerid);
Компонуется при указании параметра -lrt.
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
timer_getoverrun(): _POSIX_C_SOURCE >= 199309L
ОПИСАНИЕ
Вызов timer_getoverrun() возвращает «счётчик переполнения» (overrun
count) таймера, заданного в timerid. Приложение может использовать
счётчик переполнения для точного вычисления количества срабатываний
(expirations) таймера, которые бы произошли за указанный временной
интервал. Переполнения таймера могут происходить при получении уведомлений о
срабатывании (expiration notifications) посредством сигналов
(SIGEV_SIGNAL) и нитей (SIGEV_THREAD).
Если уведомление о срабатывании доставляется сигналом, то переполнение может происходить следующим образом. Независимо от того, используется ли для таймерных уведомлений сигнал реального времени или нет, система ставит в очередь не более одного сигнала на таймер (так определено в POSIX.1. В противном случае, если ставить в очередь один сигнал на каждое срабатывание таймера, то легко можно превысить разрешённый размер очереди сигналов в системы). Из-за задержек системного планировщика или временной блокировки сигнала может возникать задержка между генерацией уведомляющего сигнала и его доставкой (delivered) (например, в обработчик сигнала) или приёмом (accepted) (например, с помощью sigwaitinfo(2)). В этом промежутке могут произойти дополнительные срабатывания таймера. Переполнение счётчика таймера — это количество дополнительных срабатываний таймера, которые произошли между генерацией и доставкой или принятием сигнала.
Переполнение таймера также может произойти когда уведомление о срабатывании доставляется через вызов нити, так как здесь может возникать произвольная задержка между срабатыванием таймера и вызовом уведомляемой нити, и в этом промежутке могут произойти дополнительные срабатывания таймера.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении timer_getoverrun() возвращается счётчик
переполнений заданного таймера; он может быть равен 0, если если
переполнений не было. При ошибке возвращается -1, а errno устанавливается
в соответствующее значение кода ошибки.
ОШИБКИ
EINVAL Значение timerid не является допустимым идентификатором таймера.
ВЕРСИИ
Данный системный вызов появился в Linux 2.6.
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.
ЗАМЕЧАНИЯ
Когда уведомления таймера доставляются посредством сигналов
(SIGEV_SIGNAL), в Linux также возможно узнать значение счётчика
переполнения из поля si_overrun структуры siginfo_t (смотрите
sigaction(2)). Это позволяет приложению не делать лишнего системного
вызова для получения счётчика, но это непереносимое расширение POSIX.1.
В POSIX.1 переполнение таймера обсуждается только в контексте уведомлений таймера с помощью сигналов.