我完全被封锁。我试图修改C中的“警报”信号,以便在秒数到期时读取一个简单的变量。我的代码如下:
in main:
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);
}
}
我的范围是读取mymenu()中的无限选项,并在5秒钟后调用信号处理程序。读取处理程序中的内容后,我想再次读取mymenu()中的无限选项,并在5秒钟后再次调用处理程序,依此类推。我当前的输出如下:我从main读取无限的选项,在5秒钟后调用了处理程序,但在此之后仅5到5秒钟就调用了处理程序,而没有mymenu()。您能帮我吗?
我想我知道你想做什么,先想一想:
{
exit(0);
flag=0;
}
该标志不会设置为0,因为您的程序将首先退出。回答您的问题,这是发生在您身上的原因,因为在调用警报时,该函数的运行会在那一刻中断并设置为失败,并且在调用之后,您的程序将在下一行继续。
我建议您使用带有0标志的siginterrupt,此调用可让您尝试重新运行警报调用后被中断的相同功能。
祝你好运,告诉我们结果!