infinte while循环中的信号

问题描述 投票:0回答:1

我完全被封锁。我试图修改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()。您能帮我吗?

c linux signals handler
1个回答
0
投票

我想我知道你想做什么,先想一想:

{
   exit(0);
   flag=0;
}

该标志不会设置为0,因为您的程序将首先退出。回答您的问题,这是发生在您身上的原因,因为在调用警报时,该函数的运行会在那一刻中断并设置为失败,并且在调用之后,您的程序将在下一行继续。

我建议您使用带有0标志的siginterrupt,此调用可让您尝试重新运行警报调用后被中断的相同功能。

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

© www.soinside.com 2019 - 2024. All rights reserved.