1 是什么? setitimer (全称是 Set Interval Timer,即“设置间歇定时器”) 是 Linux/UNIX 系统中用于设置间歇定时器(interval timer)的系统调用。 它可以在指定的时间后触发信号, 并且可以周期性地重复触发, 从而实现延时或定时执行任务的功能。 简单来说,调用 setitimer 后, 系统会在指定时间到期时向进程发送一个信号, 进程捕获该信号后执行相应的处理函数。2 函数原型与头文件 # include <sys/time.h> int setitimer ( int which, const struct itimerval * new_value, struct itimerval * old_value) ; 定时器是进程级别的,信号会投递到进程中任意未阻塞该信号的线程。返回值: 成功返回 0;失败返回 -1 并设置 errno参数 #1 int which Linux 系统为每个进程提供了三种不同的定时器,通过 which 参数指定使用哪一种 ITIMER_REAL 按真实时间(墙上时钟)计时,无论进程是否运行 触发信号 SIGALRM ITIMER_VIRTUAL 仅在进程用户态执行时计时 触发信号 SIGVTALRM ITIMER_PROF 在进程用户态和内核态执行时均计时 触发信号 SIGPROF #2 const struct itimerval *new_value 指向 struct itimerval 结构体的指针,用于指定定时器的触发时间 #3 struct itimerval *old_value 用于保存调用前的旧值。若传 NULL,则不保存3 struct itimerval struct itimerval { struct timeval it_interval; // 定时器周期(重复间隔) struct timeval it_value; // 首次触发的剩余时间 } ; it_value: 指定定时器第一次触发的时间。 当定时器倒计时到 0 时,系统发送信号。 it_interval: 指定之后每次重复触发的时间间隔。 如果为 0,则定时器只触发一次(单次定时器); 如果不为 0,则每次触发后自动重置为这个间隔,实现周期性定时。struct timeval { time_t tv_sec; // 秒 suseconds_t tv_usec; // 微秒 (0 ~ 999999) } ;