系统调用 setitime(r)
创建一个 间隔定时器(interval timer),
该定时器会在未来某个时间点到期,并于此后(可选择地)每隔一段时间到期一次。
#include <sys/time . h>
int setitimer(int which, const struct itimerval *new_ value, struct itimerval *old_ value);
// Returns 0 on success, or-1 on error
which指定值,只能选择其一:
ITIMER_REAL
SIGALARM
信号并发送给进程。ITIMER_VIRTUAL
SIGVTALRM
。ITIMER-PROF
创建一个 profiling
定时器,以**进程时间(用户态与内核态 CPU 时间的总和)**倒计时。到期时,则会产生 SIGPROF
信号。
对所有这些信号的默认处置(disposition)均会终止进程。如果不希望如此,则需定义信号处理函数。
如果不关心定时器的前一设置,可以将 old_value 置为 NULL
其他注意省略,具体查阅手册
其中的对应的结构itimerval
:
struct itimerval{
struct timeval it_interval; // 定时器重复的间隔
struct timeval it_value; // 初始的间隔时间
}
struct timeval {
time_t tv_sec; /* Seconds */
suseconds_t tv_usec; /* Microseconds */
};
两种间隔:初始间隔it_value
和 重复间隔 it_interval
。
举个例子,就像 医生给你一些药丸并告诉你:“过一个小时吃第一粒,然后每隔4个小时吃一粒。”
<aside> 📢 定时器会从初始值(it_value)倒计时一直到 0 为止。递减为 0 时,会将相应信号发送给进程,随后,如果时间间隔值(it_interval)非 0,那么会再次将 it_value 加载至定时器,重新开始向 0 倒计时
</aside>