定时函数setitimer()

来源:互联网 发布:阿里云服务器 域名 编辑:程序博客网 时间:2024/06/05 08:10

定时函数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;
}