如何在C语言Linux中重置alarm()函数

4

一旦启动并运行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 ??
  }
}
3个回答

10

您只需要设置新的闹钟,旧的闹钟就会被取消:

alarm (5);

Linux alarm man页面(稍作改动):

alarm()会安排在指定的秒数后向调用进程发送SIGALRM信号。

如果指定的秒数为零,则不会安排新的闹钟。

无论如何,任何先前设置的闹钟都将被取消。

正如所述,在其他任何操作之前,调用alarm()将取消任何当前闹钟。如果alarm()的参数为零,则不会创建新的闹钟。
因此,alarm(0)将取消任何当前活动的闹钟,而alarm(5)将创建一个新的5秒闹钟或重置当前活动的闹钟为5秒。

4
要取消一个已经设定的 alarm(),使用 alarm(0)。它的返回值告诉你上一次调用 alarm() 时剩余的时间。然后你可以自由地重新设置一个 alarm。

-1
使用sigaction()系统调用,并仅在启动时处理警报信号。 当您需要时,使用ISR函数重置每个操作的警报。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接