2013-04-21 58 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

相關問題