我想有一個信號處理程序停止計時器而不退出我的程序。我該怎麼去。我想StopTimer來處理信號,停止計時信號處理程序停止計時器在C
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
#define INTERVAL 2 // number of seconds to go off
int main(int argc, char* argv[]) {
TimerSet(INTERVAL);
while(1)
{
// do stuff
}
return 0;
}
void TimerSet(int interval)
{
printf("starting timer\n");
struct itimerval it_val;
// interval value
it_val.it_value.tv_sec = interval;
it_val.it_interval = it_val.it_value;
// on SIGALRM, close window
if (signal(SIGALRM, TimerStop) == SIG_ERR)
{
perror("Unable to catch SIGALRM");
exit(1);
}
// set interval timer, returns SIGALRM on expiration
if (setitimer(ITIMER_REAL, &it_val, NULL) == -1)
{
perror("error calling setitimer()");
exit(1);
}
}
void TimerStop(int signum)
{
printf("Timer ran out! Stopping timer\n");
exit(signum);
}
我試圖setitimer時間間隔設置爲0,但我不知道如何使用相同的計時器TimerStop信號處理函數
在調用'signal()'之前,只需將'it_interval'設置爲零,並且您將獲得一次性計時器,並且您不必在處理程序中執行任何操作。 –
在調用'setitimer()'之前,而不是'signal()'。你也從來沒有設置'struct itimerval'的'tv_usec'成員,這是不好的。 –
您不應該在信號處理程序中使用fprintf()和朋友。 fprintf()不是信號安全的。 – wildplasser