Установить значение интервального таймера
#include <sys/time.h>int setitimer( int which,const struct itimerval *value,struct itimerval *ovalue );
ITIMER_REAL
.NULL
, или указатель на структуру struct itimerval, в которую функция запишет предыдущее значение интервального таймера.libc
Система предоставляет каждому процессу несколько типов интервальных таймеров, определенных в <sys/time.h>
.
Функция setitimer() устанавливает таймер с типом which в соответствии со значением структуры value. Если указатель на структуру ovalue не равен NULL
, то в этой структуре сохраняется предыдущее значение таймера.
Значение таймера определяется в структуре struct itimerval. Установка параметра it_value в 0
выключит таймер не зависимо от значения it_interval. Это произойдет после следующего истечения таймера при условии, что параметр it_value имеет ненулевое значение.
Если значения времени меньше, чем разрешение системных часов, то они округляются до этого разрешения.
Единственным поддерживаемым типом таймера является ITIMER_REAL
, который уменьшается (декрементируется) в реальном времени. В момент истечения этого таймера генерируется сигнал SIGALRM
.
Сгенерированный сигнал SIGALRM
не маскируется в этом потоке никакой функцией маскирования сигналов типа pthread_sigmask() или sigprocmask().
![]() | Из-за особенностей измерения времени таймер может фактически истечь позже указанного времени. |
100,000,000
, или количество микросекунд указано более или равным 1,000,000
, или не распознан аргумент which. POSIX 1003.1 X/Open Systems Interfaces Extension
Флаги функции setitimer() отличные от ITIMER_REAL
ведут себя так, как описано только в “связанных” (bound) потоках. Их способность маскировать сигнал работает только со связанными потоками. Если вызов выполняется с использованием одного из этих флагов из несвязанного потока, системный вызов возвратит-1
и установит значение переменной errno в EACCES
.
Данное поведение одинаково для связанных или несвязанных потоков POSIX. POSIX поток с общесистемным действием (system-wide scope), созданный функцией:
pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
эквивалентен связанному потоку Solaris. POSIX поток локального действия (local process scope), созданный функцией:
pthread_attr_setscope( &attr, PTHREAD_SCOPE_PROCESS );
эквивалентен несвязанному потоку Solaris.
Значение в поле микросекунд не должно быть равно или превышать одну секунду.
Функция setitimer() независима от alarm().
Не рекомендуется использовать вызов setitimer( ITIMER_REAL
) вместе с функцией sleep(), поскольку sleep() стирает информацию о пользовательском обработчике сигнала SIGALRM
.
Точность временного разрешения для срабатывания alarm зависит от аппаратной платформы.
struct itimerval, alarm(), getitimer(), gettimeofday(), pthread_attr_setscope(), pthread_sigmask(), sigprocmask(), sleep(), sysconf()
Предыдущий раздел: Описание API системной библиотеки