2013-04-21 47 views
-1

的什么,我试图做的主要思路:强制报警处理程序被调用每1秒(在C)

我的目标是,alarm_handler将被称为每隔1秒,尽管其他信号(在这种情况下,SIGUSR2)。为此,我在暂停()语句之前编写了警报(1)。

但是,实际情况是,如果我多次接收SIGUSR2信号,alarm_handler永远不会被调用(虽然我确实希望每隔1秒调用一次)。

注意:我不想忽略SIGUSR2信号。我希望他们完成,但我必须确保alarm_handler每1秒完成一次。

这里是主要的:

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

看跌什么,那就是需要在每次处理后的第二到一个单独的函数,该函数,为当前时间设置一个全局计数器。每次调用任何信号处理程序时,都应检查计数器是否与当前秒匹配,如果不匹配,则调用run_this_every_second()。

+0

如何设置一个计数器到全球时间? – Jjang 2013-04-21 15:38:20

+0

没有为我工作..你能写出它应该怎么做? – Jjang 2013-04-21 15:58:22

相关问题