gpt4 book ai didi

c - 无限 while 循环中的信号

转载 作者:行者123 更新时间:2023-11-30 16:08:58 31 4
gpt4 key购买 nike

我完全被屏蔽了。我尝试修改 C 中的“警报”信号,以便在秒数到期时读取一个简单的变量。我的代码如下:

在主要部分:

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 - 无限 while 循环中的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59235241/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com