定时函数setitimer()
2012-08-25 01:24:43| 分类: linux | 标签:时间 |字号大中小 订阅
//struct itimerval
//{
// struct timeval it_interval; /* 下次定时取值 */
// struct timeval it_value; /* 本次定时设置值 */
//};
//struct timeval
//{
// long tv_sec; /* 秒(1000000微秒) */
// long tv_usec; /* 微妙 */
//}
//which的值
//这三种定时器定时完成时给进程发送的信号各不相同,
//ITIMER_REAL类定时器发送SIGALRM信号,
//ITIMER_VIRT类定时器发送SIGVTALRM信号,
//ITIMER_PROF类定时器发送SIGPROF信号。
//itimerval结构中的it_value是代表首次定时的时间,
//而it_interval代表下一次定时的时间,执行完第一次之后,
//it_interval中的时间会赋值给it_value,周而复始。
//如果it_value值被设置为0,则定时器停止定时;
//如果it_value值不为0但it_interval值为0,则定时器在一次定时后终止。
//setitimer执行成功返回0,否则返回-1
//参数ovalue
//该参数可以使用空值NULL,如果不为空的话,返回的是上一个时刻的定时器状态。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
int n=0;
void doAction(int sig)//你要做的事情
{
printf("do like this %d\n",n++);
}
void setMyTimer(int val)
{
struct itimerval value;
value.it_value.tv_sec=val;
value.it_value.tv_usec=0;
value.it_interval.tv_sec=val; //val秒
value.it_interval.tv_usec=0;
signal(SIGALRM, doAction);
int tm = setitimer(ITIMER_REAL,&value,NULL);
printf("tm: %d\n",tm);
while(1) {
getchar();
}
}
int main( int argc, char **argv )
{
int val;
scanf("%d",&val);
setMyTimer(val);
return 0;
}