linux-datetime

timer

void timer_Handler(union sigval v)
{
LOG_INFO<<"timer_Handler enter...";
}

int init_timer(timer_t *timerid, struct sigevent *evp, struct itimerspec *it)
{
if ( !evp || !it )
return -1;

memset(evp, 0, sizeof(struct sigevent)); //清零初始化

evp->sigev_value.sival_int = 111; //也是标识定时器的,这和timerid有什么区别?回调函数可以获得
evp->sigev_notify = SIGEV_THREAD; //线程通知的方式,派驻新线程
evp->sigev_notify_function = timer_Handler; //线程函数地址
// evp.sigev_value.sival_ptr = this; //这里传一个参数进去,在timer的callback回调函数里面可以获得它

if (timer_create(CLOCK_REALTIME, evp, timerid) == -1)
{
perror("fail to timer_create");
return -1;;
}

printf("timer_create timerid = %d\n", (int)*timerid);
it->it_interval.tv_sec = 0; // 后续按照该时间间隔
it->it_interval.tv_nsec = 14*1000000; //14ms

it->it_value.tv_sec = 0; // 最初开始时间间隔
it->it_value.tv_nsec = 14*1000000; //14ms

return 0;
}

int start_timer(timer_t *timerid, struct itimerspec *it)
{
if (it == NULL){
return -1;
}
if (timer_settime(*timerid, 0, it, NULL) == -1)
{
perror("fail to timer_settime");
return -1;
}

return 0;
}


timer_t timerid = 0;
struct sigevent evp;
struct itimerspec it;
//memset(&evp, 0x00, sizeof(struct sigevent));
//memset(&it, 0x00, sizeof(struct itimerspec));

int ret = init_timer(&timerid, &evp, &it);
if (ret < 0){
printf("init_timer failed\n");

}
ret = start_timer(&timerid, &it);
if (ret < 0){
printf("start_timer failed\n");

}else
{
printf("start timer ok\n");
}