1、创建定时器
#include <time.h>
timer_t timerTid;
struct itimerspec timerIt;
int create_timer()
{//printf("%s %d Test\n",__func__,__LINE__);
int ret = -1;
struct sigevent evp;
memset(&evp, 0, sizeof(struct sigevent));
evp.sigev_value.sival_int = 4;
evp.sigev_notify = SIGEV_THREAD;
evp.sigev_notify_function = func; //func指定时器到时间后所要做的动作 void func()
ret = timer_create(CLOCK_MONOTONIC, &evp, &timerTid);
if (ret == -1)
{
perror("fail to timer_create");
exit(-1);
}
timerIt.it_interval.tv_sec = 0;
timerIt.it_interval.tv_nsec = 0;
timerIt.it_value.tv_sec = 0;
timerIt.it_value.tv_nsec = 0;
ret = timer_settime(timerTid, 0, &timerIt, NULL);
if (ret == -1)
{
perror("fail to timer_settime");
exit(-1);
}
return ret;
}
2、重置定时器
int reset_timer()
{
timerIt.it_value.tv_sec = 0;
timerIt.it_value.tv_nsec = 300*1000000;
if (timer_settime(timerTid, 0, &timerIt, NULL) == -1)
{
perror("fail to timer_settime");
exit(-1);
}
}
3、停止定时器
int stop_timer(void)
{
timerIt.it_value.tv_sec = 0;
timerIt.it_value.tv_nsec = 0;
if (timer_settime(timerTid, 0, &timerIt, NULL) == -1)
{
perror("fail to timer_settime");
exit(-1);
}
}
说明:用该方法设置定时器不会中断sleep