当前位置:   article > 正文

linux-c时间定时器函数timerfd_linux c 语言 定时器

linux c 语言 定时器

timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景。

  1. int timerfd_create(intclockid, intflags);
  2. int timerfd_settime(intfd, intflags, const struct itimerspec *new_value, struct itimerspec *old_value);
  3. int timerfd_gettime(intfd, struct itimerspec *curr_value);

===================================================

1.函数 timerfd_create

int timerfd_create(intclockid, intflags);

它是用来创建一个定时器描述符 timerfd

第一个参数:clockid指定时间类型,有两个值:

  1. CLOCK_REALTIME :Systemwide realtime clock. 系统范围内的实时时钟
  2. CLOCK_MONOTONIC:以固定的速率运行,从不进行调整和复位 ,它不受任何系统time-of-day时钟修改的影响

第二个参数:flags可以是0或者O_CLOEXEC/O_NONBLOCK。

返回值:timerfd(文件描述符)

-------------------------------------------------------------------------------

文件描述符 timerfd 要设置的超时结构体

  1. struct timespec {
  2. time_t tv_sec; /*Seconds*/
  3. long tv_nsec; /*Nanoseconds*/
  4. };
  5. 结构体itimerspec就是timerfd要设置的超时结构体
  6. struct itimerspec {
  7. struct timespec it_interval; /*Interval for periodic timer*/
  8. struct timespec it_value; /*Initial expiration*/
  9. };
  10. it_value表示定时器第一次超时时间,
  11. it_interval表示之后的超时时间即每隔多长时间超时

===========================================

2.函数 timerfd_settime
  1. int timerfd_settime(
  2. intfd,
  3. intflags,
  4. const struct itimerspec *new_value,
  5. struct itimerspec *old_value);

函数作用:用来启动或关闭有fd指定的定时器

参数说明:

  1. fd:文件描述符timerfd,  timerfd_create函数返回
  2. fnew_value:
  3. /***********************************
  4. 指定新的超时时间,
  5. 设定new_value.it_value非零则启动定时器,否则关闭定时器,
  6. 如果new_value.it_interval为0,则定时器只定时一次,即最开始的那次;
  7. 不为0,则为超时时间间隔,之后每隔设定时间超时一次
  8. ***********************************/
  9. old_value:不为null,则返回定时器这次设置之前的超时时间
  10. flags: 1代表设置的是绝对时间;为0代表相对时间

========================================

3.函数 timerfd_gettime

int timerfd_gettime(intfd, struct itimerspec *curr_value);

此函数返回文件描述符fd所标识定时器的间隔及剩余时间。间隔以及距离下次到期的时间均返回curr_value指向的结构itimerspec中,用于获得定时器距离下次超时还剩下的时间。

如果调用时定时器已经到期,并且该定时器处于循环模式(设置超时时间时struct itimerspec::it_interval不为0),那么调用此函数之后定时器重新开始计时。

=======================================

4.函数timerfd_release

函数释放timerfd_create函数中申请的资源,删除已分配的定时器。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/470994
推荐阅读
相关标签
  

闽ICP备14008679号