无限循环中的信号
Signal in a infinte while loop
我完全被封锁了。我试图修改 C 中的 "alarm" 信号,以便在秒数到期时读取一个简单的变量。我的代码如下:
主要内容:
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,是一个允许你尝试重新运行相同函数被中断后的报警调用的调用。
祝你好运,告诉我们结果!
我完全被封锁了。我试图修改 C 中的 "alarm" 信号,以便在秒数到期时读取一个简单的变量。我的代码如下:
主要内容:
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,是一个允许你尝试重新运行相同函数被中断后的报警调用的调用。
祝你好运,告诉我们结果!