当前位置:   article > 正文

Linux timerfd 的基本使用_timerfd_create(clock_monotonic

timerfd_create(clock_monotonic

本文摘自写给应用开发的 Android Framework 教程,完整教程请查阅 https://yuandaimaahao.github.io/AndroidFrameworkTutorialPages/

timerfd 是什么

timerfd 是一个时间相关的 fd,当 timerfd 初始化时,可以设置一个超时时间,超时之后,该句柄可读,读出来的是超时的次数。

timerfd 使用起来比较简单,我们把他的用法过一遍即可:

timerfd 的使用

timerfd 相关的系统调用有 3 个:

  1. // 创建一个 timerfd 句柄
  2. int timerfd_create(int clockid, int flags);
  3. // 启动或关闭 timerfd 对应的定时器
  4. int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);
  5. // 获取指定 timerfd 距离下一次超时还剩的时间
  6. int timerfd_gettime(int fd, struct itimerspec *curr_value);

timerfd 常与 epoll 系统调用结合使用:

  1. // 创建一个 timerfd 句柄
  2. int fdTimer = timerfd_create(CLOCK_MONOTONIC, 0 /*flags*/);
  3. itimerspec timespec {
  4.     // 设置超时间隔
  5.     .it_interval = {
  6.         .tv_sec = 5,
  7.         .tv_nsec = 0,
  8.     },
  9.     //第一次超时时间
  10.     .it_value = {
  11.         .tv_sec = 5,
  12.         .tv_nsec = 0,
  13.     },
  14. };
  15. //启动定时器
  16. int timeRes = timerfd_settime(fdTimer, 0 /*flags*/&timespec, nullptr);
  17. // epoll 监听 timerfd
  18. epoll_ctl(mEpollFd, EPOLL_CTL_Add, fdTimer, &eventItem);
  19. while (true)
  20. {   
  21.     // 进入休眠状态
  22.     epoll_wait(mEpollFd, eventItems, EPOLL_MAX_EVENTS, timeoutMillis);
  23.     if (count < 0)
  24.     {
  25.         perror("epoll failed");
  26.         break;
  27.     }
  28.     for (int i=0;i < count;i++)
  29.     {
  30.         //处理计时器到达事件
  31.     }
  32. }

参考资料

  • Linux fd 系列 — 定时器 timerfd 是什么?

转自:Linux timerfd 的基本使用

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

闽ICP备14008679号