Linux下定时函数setitimer

简介
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结构体原型:

struct itimerval{  
    struct timeval it_interval;  
    struct timeval it_value;  
};  


timeval结构体原型:

struct timeval{  
    time_t tv_sec; /*秒*/  
    suseconds_t tv_usec; /*微妙*/  
};  

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

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

setitimer( )函数简单用例:

#include <stdlib.h>  
#include <stdio.h>  
#include <unistd.h>  
#include <signal.h>  
#include <time.h>  
#include <sys/time.h>  
  
#define COUNT_SEC 10  
#define COUNT_USEC 0  
  
/*Initialize timer*/  
static void Init_timer(struct itimerval *tick)  
{  
    int ret;  
    memset(tick, 0, sizeof(struct itimerval));  
  
    /*initialize it_value*/  
    tick->it_value.tv_sec = COUNT_SEC;  
    tick->it_value.tv_usec = COUNT_USEC;  
  
    /*initialize it_interval*/  
    tick->it_interval.tv_sec = COUNT_SEC;  
    tick->it_interval.tv_usec = COUNT_USEC;  
  
    return;  
}  
  
/*Callback function when time's up*/  
static void Timeout_callback(int sig)  
{  
    printf("timeout callback function\n");  
    return;  
}  
  
int main(void)  
{  
    int ret = 0;  
    struct itimerval tick;  
  
    signal(SIGALRM, Timeout_callback);  
  
    Init_timer(&tick);  
  
    ret = setitimer(TIMER_REAL, &tick, NULL);  
    if(ret < 0)  
    {  
        printf("setitimer failed!\n");  
        return -1;  
    }  
  
    while(1);  
  
    return 0;  
}  

当setitimer()所执行的timer时间到了,会呼叫SIGALRM signal,所以用signal()将要执行的function指定给SIGALRM。

若只想延迟一段时间执行function,只要设定 itimerval.it_value即可,若要设定间格一段时间就执行function,则it_value和it_interval都要设定,否则 funtion的第一次无法执行,就别说以后的间隔执行了。

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

http://blog.csdn.net/fanwenbo/article/details/2645362

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值