2013-03-20 1 views
3

Как только начнется и запустятся какие-либо секунды, через некоторое время в программе, если произойдет какое-то действие, мне нужно снова сбросить сигнал тревоги до alarm(5). Как я могу это достичь?Как сбросить тревогу() в c linux

Доступна любая сигнализация reset()?

int flag=0; 
void alarmhand(int signal) 
{ 
    flag=1; 
    // printf("\n time out"); 
} 

void main() 
{ 
    signal(SIGALRM,alarmhand); 
    alarm (5); 
    while(1) 
    { 
    event_status(); 
    if(flag==1) 
     break; 
    } 
} 

void event_status() 
{ 
    int reset; 
    printf("reset 1=y/2=n :"); 
    scanf("%d",&reset); 
    if(reset==1) 
    { 
    // alarm.reset(5); 
    // HOW DO I RESET THE ALARM AGAIN TO 5 HERE ?? 
    } 
} 

ответ

7

Вы можете просто установить новый сигнал и старый будет отменен:

alarm (5); 

Из Linux alarm man page, слегка перефразировать):

alarm() устраивает для SIGALRM сигнал доставляться вызывающему процессу в заданное количество секунд.

Если заданное количество секунд равно нулю, никакой новой тревоги не запланировано.

В любом случае любой ранее установленный аварийный сигнал отменяется.

Как уже отмечалось, любой ток сигнал отменяется вызовом alarm() прежде всего. Новый не будет создан, если аргумент alarm() равен нулю.

Таким образом, alarm(0) отменит любой активный сигнал тревоги, в то время как alarm(5) либо создаст новый сигнал тревоги, либо сбросит текущий активный сигнал тревоги на 5 секунд.

2

Чтобы отменить непогашенный alarm(), используйте alarm(0). Его возвращаемое значение сообщает вам, сколько времени было не использовано с последнего вызова до alarm(). Разумеется, вы можете свободно установить новый сигнал тревоги.

-1

Использовать sigaction() системный вызов и обрабатывать сигнал тревоги только при запуске. Используйте функцию ISR для сброса тревоги для каждого действия, когда вы хотите.

Смежные вопросы