【发布时间】:2023-03-18 03:33:01
【问题描述】:
static void AlarmHandler(int sig) ;
int i=0;
jmp_buf mark;
int main(int argc, char * argv[]){
setjmp(mark);
signal(SIGALRM, AlarmHandler);
alarm(2);
while(1);
return 0;
}
static void AlarmHandler(int sig) {
signal(SIGALRM, SIG_IGN);
printf("I am in AlarmHandler: %d \n",i);
i++;
longjmp(mark, 0);
}
当我运行这段代码时,程序只通过 AlarmHandler 一次,然后它就停留在 while 循环中。谁能解释一下原因?
【问题讨论】:
-
您的
i应该是volatile sig_atomic_t。另外,您为什么要使用setjmp/longjmp?这可以以更简洁的方式实现......而且你不应该在信号处理程序中使用库函数。 -
@EugeneSh。这不是我正在开发的程序。这只是我遇到麻烦的部分。
setjmp/longjmp在这里确实是不必要的,但我确实需要它。