Linux系统编程-setitimer函数

功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能。

头文件:sys/time.h

函数原型:

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

参数含义:

1、which参数用来设置定时器类型,可选的值为

  (1)ITIMER_REAL : 设置定时器以系统真实所花费的时间来计时,运行指定时间后发送SIGALRM信号。

  (2)ITIMER_VIRTUAL : 设置进程在用户空间中执行时,时间计数减少。运行指定时间后发送SIGVTALRM信号

  (3)ITIMER_PROF : 设置进程在内核空间中执行时,时间计数减少。运行指定时间后发送SIGPROF信号。

2、new_value参数 : 用来对定时器的定时时间进行设置

3、old_value参数 :很少使用,常常设置为NULL。它是用来存储上一次setitimer调用时设置的new_value值。

itimerval结构体:

struct timeval
{
time_t tv_sec; /* 秒*/
suseconds_t tv_usec; /* 微秒(10^(-6))*/
}; struct itimerval
{
struct timeval it_interval; /* 再次产生定时器信号的时间 */
struct timeval it_value; /* 首次产生定时器信号的时间 */
};

settimer的机制:先对it_value以which参数设置的方式倒计时,当it_value为零时就会发送信号。然后it_value会被重置为it_interval的值。最后重新开始新一轮的定时,按照这种方式一直循环下去。

注意:

1、it_value的值为0,将不会发送信号。因此要想能发送信号,it_value的值得大于0

2、it_interval的值为0,定时器只会发送一次信号,即只能延时,不能定时。

demo程序:

 #include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h> void call_back(int sig)
{
static int count = ;
printf("call_back : %d\n", count++);
} int main(void)
{
signal(SIGALRM, call_back);
struct itimerval new_value;
memset(&new_value, , sizeof(new_value)); new_value.it_interval.tv_sec = ; //设置再次定时时间为1S
new_value.it_interval.tv_usec = ;
new_value.it_value.tv_sec = ; //设置首次定时时间为2S
new_value.it_value.tv_usec = ; int ret = setitimer(ITIMER_REAL, &new_value, NULL);
if ( != ret)
{
perror("setitimer");
exit(-);
}
getchar(); return ;
}

运行结果:

Linux系统编程-setitimer函数

上一篇:Java Web程序设计笔记 • 【第3章 JSP内置对象】


下一篇:Java Web程序设计笔记 • 【目录】