定时产生信号
定时产生信号:alarm()函数
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
-
功能:
设置定时器(闹钟)。在指定
seconds
后(自然计时法),内核会给当前进程发送14 SIGALRM
信号。进程收到该信号,默认动作终止。每个进程都有且只有唯一的一个定时器。 -
取消定时器
alarm(0)
,返回旧闹钟余下秒数。 -
参数:
seconds
:指定的时间,以秒为单位 -
返回值:
返回0或剩余的秒数
周期定时产生信号:setitimer()函数
#include <sys/time.h>
int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
-
功能:设置定时器(闹钟)。 可代替alarm函数。精度微秒us,可以实现周期定时。
-
参数:
-
which
:指定定时方式- a) 自然定时:
ITIMER_REAL
- b) 虚拟空间计时(用户空间):
ITIMER_VIRTUAL
,只计算进程占用cpu的时间 - c) 运行时计时(用户 + 内核):
ITIMER_PROF
,计算占用cpu及执行系统调用的时间
- a) 自然定时:
-
new_value
:struct itimerval*
, 负责设定timeout时间struct itimerval { struct timerval it_interval; // 闹钟触发周期 struct timerval it_value; // 闹钟触发时间,几秒后发送信号 }; struct timeval { long tv_sec; // 秒 long tv_usec; // 微秒 }
-
old_value
: 存放旧的timeout值,一般指定为NULL
-
-
返回值:
成功:0
失败:-1