一旦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)
您可以设置新警报,旧警报将被取消:
alarm (5);
Run Code Online (Sandbox Code Playgroud)
从Linux alarm
手册页,略有转述):
alarm()
安排SIGALRM
在指定的秒数内将信号传递给调用进程.如果指定的秒数为零,则不会安排新的警报.
无论如何,任何先前设置的警报都会被取消.
如上所述,任何当前警报都会通过alarm()
之前的呼叫取消.如果参数to alarm()
为零,则不会创建新的.
因此,alarm(0)
将取消任何当前活动的警报,同时alarm(5)
将创建新的警报,或将当前活动的警报重置为5秒.