无限循环中的信号

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,是一个允许你尝试重新运行相同函数被中断后的报警调用的调用。

祝你好运,告诉我们结果!