美文网首页
Linux timerfd系列函数

Linux timerfd系列函数

作者: 再凌 | 来源:发表于2020-12-09 17:41 被阅读0次

    使用Linux 提供的timerfd和epoll可以实现Timer的定时唤醒功能.

    需要引入头文件#include <sys/timerfd.h>

    1. int timerfd_create(int clockid, int flags);

    clockid有两种:
    CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
    CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响

    flag可选参数为:
    TFD_NONBLOCK(非阻塞模式)/TFD_CLOEXEC(表示当程序执行exec函数时本fd将被系统自动关闭,表示不传递)

    返回值是其文件标识符

    2. int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);

    /*
        timerfd_settime()此函数用于设置新的超时时间,并开始计时,能够启动和停止定时器;
        fd: 参数fd是timerfd_create函数返回的文件句柄
        flags:参数flags为1代表设置的是绝对时间(TFD_TIMER_ABSTIME 表示绝对定时器);为0代表相对时间。
        new_value: 参数new_value指定定时器的超时时间以及超时间隔时间
        old_value: 如果old_value不为NULL, old_vlaue返回之前定时器设置的超时时间,具体参考timerfd_gettime()函数
    
        ** it_interval不为0则表示是周期性定时器。
           it_value和it_interval都为0表示停止定时器
    */
    

    3. int timerfd_gettime(int fd, struct itimerspec *curr_value);

     int timerfd_gettime(int fd, struct itimerspec *curr_value);
    /*
        timerfd_gettime()函数获取距离下次超时剩余的时间
        curr_value.it_value 字段表示距离下次超时的时间,如果改值为0,表示计时器已经解除
        改字段表示的值永远是一个相对值,无论TFD_TIMER_ABSTIME是否被设置
        curr_value.it_interval 定时器间隔时间
    */
    

    相关文章

      网友评论

          本文标题:Linux timerfd系列函数

          本文链接:https://www.haomeiwen.com/subject/ojphgktx.html