目标平台:LOONGSON-1B开发板
内核:Linux 3.0
测试与编译平台:ubuntu10.04
交叉工具链:gcc-3.4.6-2f
简介
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 itmierval *ovalue:保存先前的定时值,通常置NULL。
setitimer( )调用成功则返回0,否则返回-1。
setitimer( )函数简单用例:
参考资料:
http://baike.baidu.com/view/6339376.htm
内核:Linux 3.0
测试与编译平台:ubuntu10.04
交叉工具链:gcc-3.4.6-2f
简介
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;
}
参考资料:
http://baike.baidu.com/view/6339376.htm