linux setitimer的使用
reference:Linux manual page
[linux manual page--setitimer]https://man7.org/linux/man-pages/man2/setitimer.2.html
语法
int setitimer(int which,
const struct itimerval *restrict new_value,
struct itimerval *restrict old_value);
参数
- which为定时器类型
ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号。
ITIMER_VIRTUAL: 以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。
ITIMER_PROF: 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号。 - new_value
struct itimerval
{
struct timeval it_interval; /* next value */
struct timeval it_value; /* current value */
};
- old_value 结构同new_value。用来返回上一次定时器的间隔时间,如果不关心该值可设为NULL。
用法描述
- 计时
规定一个启动延时时间由new_value.it_value(!=0)确定,同时设置new_value.it_interval为0 - 定时器
new_value.it_value规定初始定时时间time1,new_value.it_interval指定定时时间time1之后的定时器时间间隔time2;如果重新设置time1=0 && time2=0,则定时器停止
代码示例
#include <iostream>
#include <signal.h>
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
using namespace std;
void signalHandler(int signo)
{
switch (signo){
case SIGALRM:
printf("Caught the SIGALRM signal!
");
break;
}
}
int main()
{
signal(SIGALRM, signalHandler);
struct itimerval new_value, old_value;
new_value.it_value.tv_sec = 1;
new_value.it_value.tv_usec = 0;
new_value.it_interval.tv_sec = 1;
new_value.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &new_value, &old_value);
for(;;);
return 0;
}