Linux多进程15-setitimer定时器函数
#include <sys/time.h>
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);
- 功能: 设置定时器(闹钟), 可以替代alarm函数, 精度微妙(us), 可以实现周期性的定时
- 参数:
- which: 定时器以什么时间计时
- ITIMER_REAL: 真实时间, 时间到达, 发送SIGALRM 常用
- ITIMER_VIRTUAL: 用户时间, 时间到达, 发送SIGVTALRM信号
- ITIMER_PROF: 以该进程在用户态和内核态下所消耗的时间来计算, 时间到达, 发送SIGPROF信号
- new_value: 设置定时器的属性
struct itimerval { // 定时器结构体
struct timeval it_interval; // 每个间隔时间 Interval for periodic timer
struct timeval it_value; // 延迟多长时间执行 Time until next expiration
};
struct timeval { // 时间的结构体
time_t tv_sec; // 秒 seconds
suseconds_t tv_usec; // 微秒 microseconds
};
例如: 过10S (it_value)后, 每隔2秒 (it_interval)定时一次
- old_value: 记录上一次的定时时间参数(一般不使用, 指定NULL)
- 返回值: 0成功, -1失败并设置错误号
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
//过3S后, 每隔2S定时一次
int main(int argc, char const *argv[])
{
struct itimerval new_value;
//设置间隔时间
new_value.it_interval.tv_sec = 2;
new_value.it_interval.tv_usec = 0;
//设置延迟时间, 3S后开始第一次定时
new_value.it_value.tv_sec = 3;
new_value.it_value.tv_usec = 0;
int ret = setitimer(ITIMER_REAL, &new_value, NULL);
if (ret == -1)
{
perror("setitimer err");
exit(0);
}
printf("定时器开始了...\n");
getchar();
return 0;
}
运行
$./setitimer
定时器开始了... #3s 后程序结束
闹钟