C infinte while循环中的信号
我完全被封锁了。我试图修改C中的“报警”信号,以便在秒数到期时读取一个简单变量。我的代码如下: 大体上:C infinte while循环中的信号,c,linux,signals,handler,C,Linux,Signals,Handler,我完全被封锁了。我试图修改C中的“报警”信号,以便在秒数到期时读取一个简单变量。我的代码如下: 大体上: int semnal; signal(SIGALRM, alarmHandler); setbuf(stdout, NULL); alarm(5); while(flag!=0) { mymenu(); } mymenu()函数: void mymenu() { int optiune; printf("%s", "My menu
int semnal;
signal(SIGALRM, alarmHandler);
setbuf(stdout, NULL);
alarm(5);
while(flag!=0)
{
mymenu();
}
mymenu()函数:
void mymenu()
{
int optiune;
printf("%s", "My menu\n");
scanf("%i", &optiune);
}
我的处理函数:
void alarmHandler(int sig)
{
int speed;
printf("\nparent signal alarm handler: times up\n");
scanf("%i", &speed);
if(speed<0)
{
exit(0);
flag=0;
}
else
{
flag++;
alarm(5);
}
}
void报警处理程序(int-sig)
{
整数速度;
printf(“\n租金信号报警处理程序:超时\n”);
扫描频率(“%i”和速度);
如果(速度我想我明白你想做什么,首先想想:
{
exit(0);
flag=0;
}
该标志不会设置为0,因为您的程序将首先退出。
回答您的问题时,这种情况会发生在您身上,因为当调用报警时,该功能正在运行,此时会被中断并设置为失败,在调用后,您的程序将在下一行继续运行
我建议您使用SIGInterupt with 0标志,是一个允许您尝试重新运行的调用,相同的函数在报警调用后被中断
祝你好运,告诉我们结果!非常感谢!它很有效!但我将标志设置为不同于0的值,而不是0