2013-04-21 2 views
-1

Основная идея о том, что я пытаюсь сделать:Принуждение обработчик сигнала будет вызываться каждый 1 второй (в C)

Моя цель состоит в том, что alarm_handler будет называться 1 раз в секунду, несмотря на другие сигналы (в этом случае SIGUSR2). Для этого я написал сигнал тревоги (1) перед операцией pause().

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

Примечание: Я не хочу игнорировать сигналы SIGUSR2. Я хочу, чтобы они были сделаны, но я должен убедиться, что alarm_handler выполняется каждую секунду.

Вот основные:

int main(int argc, const char* argv[]) 
{ 
signal(SIGUSR2, sig_readPipe); 
signal(SIGALRM, alarm_handler); 

do 
{ 
    alarm(1); 
    pause(); 
}while(stopFlag); 

return 0; 
} 

А вот обработчики сигналов:

void sig_readPipe(int sig) 
{ 
signal(SIGUSR2, sig_readPipe); 
. 
. 
. 
} 

void alarm_handler(int sig) 
{ 
signal(SIGALRM, alarm_handler); 
. 
. 
. 
} 

ответ

2

Put бы то ни было, что нужно обрабатывать каждую секунду в отдельную функцию, и в этой функции , установите глобальный счетчик текущего времени. Каждый раз, когда вызывается любой обработчик сигналов, он должен проверить, соответствует ли счетчик текущей секунде, а если нет, то вызовите run_this_every_second().

+0

Как установить счетчик в глобальное время? – Jjang

+0

не работал для меня .. не могли бы вы написать, как это должно быть сделано? – Jjang

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