Запланировать отправку сигнала
#include <unistd.h>useconds_t ualarm( useconds_t usec,useconds_t interval );
0
для отмены любого предыдущего запроса на отправку сигнала.libc
Функция ualarm() приводит к отправке системой сигнала SIGALRM
вызывающему процессу через usec микросекунд реального времени. Затем сигнал будет отправляться каждые interval микросекунд.
Задержки процессора при диспетчеризации могут привести к задержке между тем, когда сигнал отправляется и когда процесс действительно обработает его.
Если usec равен 0
, любой предыдущий запрос ualarm() отменяется.
Из-за особенностей отсчёта времени сигнал может быть послан позже указанного времени. |
SIGALRM
.
#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main( void ){useconds_t timeleft;printf( "Set the alarm and sleep\n" );ualarm( (useconds_t)( 10 * 1000 * 1000 ), 0 );sleep( 5 ); /* go to sleep for 5 seconds *//** Чтобы узнать время до следующего прибытия SIGALRM, нужно отменить* изначальный таймер, что вернёт количество времени, которое ему оставалось.*/timeleft = ualarm( 0, 0 );printf( "Time left before cancel and rearm: %ld\n", timeleft );/* Устанавливаем новый таймер, который разбудит нас, когда пройдёт timeleft микросекунд. */ualarm( timeleft, 0 );/** Подождём получение сигнал SIGALRM; любой сигнал убивает нас,* поскольку отсутствует обработчик сигналов.*/printf( "Hanging around, waiting to exit\n" );pause();/* До сюда не дойдёт. */return (EXIT_SUCCESS);}
POSIX 1003.1 X/Open Systems Interfaces Extension
Запросы от функций alarm(), TimerAlarm() и ualarm() не накапливаются; этими функциями можно запланировать доставку только одного сигнала SIGALRM
. Если SIGALRM
ещё не был сгенерирован, следующий вызов alarm(), TimerAlarm() или ualarm() перепланирует его время генерации.
Не смешивайте вызовы ualarm() с nanosleep(), sleep(), timer_create(), timer_delete(), timer_getoverrun(), timer_gettime(), timer_settime() или usleep().
alarm(), nanosleep(), sigaction(), sleep(), timer_create(), timer_delete(), timer_getoverrun(), timer_gettime(), timer_settime(), TimerAlarm(), usleep()
Предыдущий раздел: Описание API системной библиотеки