如何在c linux中重置alarm()

Nag*_*nan 3 c

一旦alarm(5)启动并运行了几秒或几秒钟,在程序中一段时间​​后如果发生某些动作,我需要再次将警报重置为alarm(5).我怎样才能做到这一点?

有警报reset()吗?

int flag=0;
void alarmhand(int signal)
{ 
  flag=1;
  // printf("\n time out");
}

void main()
{
  signal(SIGALRM,alarmhand);
  alarm (5);
  while(1)
  {
   event_status();
   if(flag==1)
       break;
  } 
}

void event_status()
{
  int reset;
  printf("reset 1=y/2=n :");
  scanf("%d",&reset);
  if(reset==1)
  {
   // alarm.reset(5);
  // HOW DO I RESET THE ALARM AGAIN TO 5 HERE ??
  }
}
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 8

您可以设置新警报,旧警报将被取消:

alarm (5);
Run Code Online (Sandbox Code Playgroud)

Linux alarm手册页,略有转述):

alarm()安排SIGALRM在指定的秒数内将信号传递给调用进程.

如果指定的秒数为零,则不会安排新的警报.

无论如何,任何先前设置的警报都会被取消.

如上所述,任何当前警报都会通过alarm()之前的呼叫取消.如果参数to alarm()为零,则不会创建新的.

因此,alarm(0)将取消任何当前活动的警报,同时alarm(5)将创建新的警报,或将当前活动的警报重置为5秒.