struct itimerval {
struct timeval it_interval; /* 计时器间隔时间 */
struct timeval it_value; /* 计时器开始执行时间*/
};
struct timeval {
long tv_sec; /* 秒 */
long tv_usec; /* 微妙 */
};
示例代码:
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>
static int count = 0;
void set_timer()
{
struct itimerval itv;
itv.it_interval.tv_sec = 1;//间隔时间
itv.it_interval.tv_usec = 0;
itv.it_value.tv_sec = 3;//启动时间
itv.it_value.tv_usec = 0;
setitimer(ITIMER_REAL,&itv,NULL);
}
void timer_handal()
{
printf("3秒开始了");
count++;
printf("第%d秒\n",count);
}
int main()
{
set_timer();
signal(SIGALRM,timer_handal);
while(count<5);
return 0;
}
运行结果:
3秒开始了第1秒
3秒开始了第2秒
3秒开始了第3秒
3秒开始了第4秒
3秒开始了第5秒
int setitimer(int which, const struct itimerval *value,struct itimerval *ovalue);
setitimer()将value指向的结构体设为计时器的当前值,如果ovalue不是NULL,将返回计时器原有值。
which:间歇计时器类型,有三种选择
ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。
ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。
ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF