Linux下定时函数setitimer

来源:互联网 发布:明石家秋刀鱼 知乎 编辑:程序博客网 时间:2024/05/16 06:20

http://blog.csdn.net/water_cow/article/details/7519436

 

简介
setitimer( )是由Linux提供的一个非标准C库函数,它提供时间精度较高的定时功能。

setitimer( )函数功能介绍:
setitimer( )函数原型:
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
参数说明:
int which:定时器类型,setitimer支持3种定时器类型:
ITIMER_REAL:以系统实际时间计算,定时结束时发送SIGALRM信号。
ITIMER_VIRTUAL:定时进程在用户态下的实际执行时间,定时结束时发送
                   SIGVTALROF信号。
ITIMER_PROF:定时进程在用户态和内核态下的实际执行时间,定时结束
               时发送SIGPORF信号。
struct itimerval *value:定时结构体,配置初次定时时间与间隔定时时间。
itimerval结构体原型:

[cpp] view plaincopyprint?
  1. struct itimerval{ 
  2.     struct timeval it_interval; 
  3.     struct timeval it_value; 
  4. }; 

timeval结构体原型:

[cpp] view plaincopyprint?
  1. struct timeval{ 
  2.     time_t tv_sec; /*秒*/ 
  3.     suseconds_t tv_usec; /*微妙*/ 
  4. }; 

it_interval指定间隔时间,it_value指定初始定时时间。初始定时超时后,系统会自动以it_interval初始化it_value
Struct itmierval *ovalue:保存先前的定时值,通常置NULL

setitimer( )调用成功则返回0,否则返回-1

setitimer( )函数简单用例:

[cpp] view plaincopyprint?
  1. #include <stdlib.h> 
  2. #include <stdio.h> 
  3. #include <unistd.h> 
  4. #include <signal.h> 
  5. #include <time.h> 
  6. #include <sys/time.h> 
  7.  
  8. #define COUNT_SEC 10 
  9. #define COUNT_USEC 0 
  10.  
  11. /*Initialize timer*/ 
  12. static void Init_timer(struct itimerval *tick) 
  13.     int ret; 
  14.     memset(tick, 0, sizeof(struct itimerval)); 
  15.  
  16.     /*initialize it_value*/ 
  17.     tick->it_value.tv_sec = COUNT_SEC; 
  18.     tick->it_value.tv_usec = COUNT_USEC; 
  19.  
  20.     /*initialize it_interval*/ 
  21.     tick->it_interval.tv_sec = COUNT_SEC; 
  22.     tick->it_interval.tv_usec = COUNT_USEC; 
  23.  
  24.     return
  25.  
  26. /*Callback function when time's up*/ 
  27. static void Timeout_callback(int sig) 
  28.     printf("timeout callback function\n"); 
  29.     return
  30.  
  31. int main(void
  32.     int ret = 0; 
  33.     struct itimerval tick; 
  34.  
  35.     signal(SIGALRM, Timeout_callback); 
  36.  
  37.     Init_timer(&tick); 
  38.  
  39.     ret = setitimer(TIMER_REAL, &tick, NULL); 
  40.     if(ret < 0) 
  41.     { 
  42.         printf("setitimer failed!\n"); 
  43.         return -1; 
  44.     } 
  45.  
  46.     while(1); 
  47.  
  48.     return 0; 

 

原创粉丝点击