我应该在代码中添加些什么来停止信号并返回Main?
请勿使用'()exit',我想结束或跳转信号并转到主要功能。 我尝试分支。但这不起作用。
main{
void countdown(int);
signal (SIGALRM, countdown);
....
....
....
}
void countdown(int signum)
{
static int num =10;
printf("%d..",num--);
fflush(stdout);
if (num <0){
printf("DONE");
exit(0); // i want to change do not use exit() and get out this signal
}
}
答案 0 :(得分:0)
signal
在收到呼叫时异步调用一个函数。当被调用的函数(此处为countdown
终止时,它将在捕获信号后的左侧位置右移。
因此,在这里,我要说的是,您只需要删除exit(0);
并让大自然完成其余的工作即可。
答案 1 :(得分:0)
您不能从信号处理程序中调用您使用的任何功能。仅来自man signal-safety
list的功能。
出于显示进度指示器而不是使用alarm/SIGALRM
的目的,您可能希望启动另一个使用nanosleep
的线程,直到下一个刻度,然后打印进度状态。