setitimer

可以达到 “微秒级”的发送闹钟信号, 它是一个可以在本轮定时任务完成后自动重启下一轮定时的定时机制

头文件

#include <sys/time.h>

函数原型

int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

函数说明

参数which : 启动的定时器类型 , setitimer 方式为每个进程提供了三种类型的定时器:

- ITIMER_REAL : 该定时器一旦启动立即执行定时计时,定时结束后产生一个 SIGALRM 信号并可根据启动前的配置决定是否自动重启下一轮定时
- ITIMER_VIRTUAL: 该定时器在启动后将只在进程处于运行态时会工作,当进程处于非运行态时,定时工作也将暂停。且这种定时器在定时结束后会产生一个 SIGVTALRM 信号
- ITIMER_PROF : 该定时器类型暂且不理

参数new_value: 用于描述定时器下一轮要执行的规则的,说白了就是你想定时多久就在这里设置。

struct itimerval {
struct timeval it_interval; // next value 含义为: 定时周期,想定时多少时间
struct timeval it_value; // current value 含义为: 让这个定时器在多少时间以后启动,立即启动则将 it_value 的值全设成0
}

struct timeval {
long tv_sec; //秒
long tv_usec; // 微秒
}

参数old_value:一般不用理会

给 it_value 设置了一个值,但 it_interval 却全设成0,就表示定时器将在 it_value 设置的时间以后发出一个定时到时信号,此后就不会再自动重启下一轮定时任务了

settimer(type, NULL, NULL) 可以取消一个正在执行的itimerval定时器

返回值

返回值为0表示启动定时器成功,失败时返回-1并设置相应的错误信息

范例

文档更新时间: 2021-03-04 02:14   作者:周国强