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 ??
  }
}
4

3 回答 3

9

您可以只设置新闹钟,旧闹钟将被取消:

alarm (5);

来自Linuxalarm手册页,稍作解释):

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

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

在任何情况下,任何先前设置的警报都会被取消。

如前所述,任何当前警报都会通过调用来取消alarm()alarm()如果 to 的参数为零,则不会创建新的。

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

于 2013-03-20T02:47:24.433 回答
4

要取消未完成的alarm(),请使用alarm(0). 它的返回值告诉您从上次调用alarm(). 当然,您随后可以自由设置新的闹钟。

于 2013-03-20T02:47:42.477 回答
-1

仅在启动时使用sigaction()系统调用和处理报警信号。使用 ISR 功能在需要时为每个操作重置警报。

于 2013-03-20T04:10:50.757 回答