一般相对时间的使用:
int tmFd;
struct itimerspec new_value;
tmFd = timerfd_create(CLOCK_MONOTONIC, 0);
new_value.it_value.tv_sec = 0;
new_value.it_value.tv_nsec = 0;
new_value.it_interval.tv_sec = 3;
new_value.it_interval.tv_nsec = 0;
timerfd_settime(tmFd, 0, &new_value, NULL)
...
FD_SET(tmFd, &rset);
select(maxFd + 1, &rset, NULL, NULL, &tv);
if (FD_ISSET(tmFd, &rset)) {
uint64_t times = 0;
ret = read(tmFd, ×, sizeof (uint64_t));
printf("TimerFd can read:%lu\n", times);
}
- new_value.it_value
这是时钟首次进入回调的时间。
按系统绝对时间计时的话,需要先获取一下当前系统时间,再加上延后的时间。
timerfd_settime方法要加入TFD_TIMER_ABSTIME。
ret = clock_gettime(CLOCK_REALTIME, &now);
printf("now.tv_sec=%ld\n"
"now.tv_nsec=%ld\n", now.tv_sec, now.tv_nsec);
new_value.it_value.tv_sec = now.tv_sec + 3; // 3秒后才触发首次
new_value.it_value.tv_sec = now.tv_nsec;
timerfd_settime(tmFd, TFD_TIMER_ABSTIME, &new_value, NULL);