timerfd_settime()的第二个参数?
想请教大家,我想使用 Linux 下定时器 timerfd
示例如下:
struct itimerspec new_value;
struct timespec now;
int ret = clock_gettime(CLOCK_REALTIME, &now);//获取时钟时间
assert(ret != -1);
new_value.it_value.tv_sec = now.tv_sec + 1; //第一次到期的时间
new_value.it_value.tv_nsec = now.tv_nsec;
new_value.it_interval.tv_sec = 1; //之后每次到期的时间间隔
new_value.it_interval.tv_nsec = 0;
int timefd = timerfd_create(CLOCK_REALTIME, TFD_NONBLOCK); // 构建了一个定时器
assert(timefd != -1);
// ret = timerfd_settime(timefd, `0, &new_value, NULL);//启动定时器
ret = timerfd_settime(timefd, TFD_TIMER_ABSTIME, &new_value, NULL);//启动定时器
如上例, 我想使用参数CLOCK_REALTIME
创建一个相对时间定时器, 在clock_gettime
和timerfd_create
函数中均使用了该参数, 然后在timerfd_settime
函数中第二个参数为0
时不应该是对应的相对定会器么, 但是设置为0
时使用epoll
去监听时时并没有触发定时器, 反而是在timerfd_settime
第二个参数设置为TFD_TIMER_ABSTIME
时定时器正常工作 (这个参数不应该对应的是绝对时间么)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
timerfd man page
new_value.it_value
设置初次定时的时间如果
timerfd_settime
第二个参数设置为0
,new_value.it_value
设置为1
如果
timerfd_settime
第二个参数设置为TFD_TIMER_ABSTIME
,new_value.it_value
设置为now.tv_sec + 1