timerfd的认识与基本使用

目录

函数介绍

测试代码

测试结果


函数介绍

具体细节可以参考文献

Qnx定时器的使用 - 简书 (jianshu.com)

下图列出基本的函数使用介绍

测试代码

#include <stdio.h>
#include <unistd.h>
#include <sys/timerfd.h>
#include <fcntl.h>
#include <stdint.h>

int main()
{
    // int timerfd_create(int clockid, int flags);
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);
    if(timerfd < 0)
    {
        perror("timer_create error");
        return -1;
    }
    // int timerfd_settime(int fd, int flags, struct itimerspec *new, struct itimerspec);
    struct itimerspec itime;
    itime.it_value.tv_sec = 1;  // 设置 秒钟
    itime.it_value.tv_nsec = 0; // 设置 纳秒 第一次超时时间为1s后
    itime.it_interval.tv_sec = 1; // 同上
    itime.it_interval.tv_nsec = 0;// 第一次超时后,每隔超时的间隔时
    timerfd_settime(timerfd, 0, &itime, nullptr);  // 0代表阻塞式

    while (1)
    {
        uint64_t times;
        int ret = read(timerfd, &times, 8);
        if(ret < 0)
        {
            perror("read error");
            return -1;
        }
        printf("超时了, 距离上一次超时了%ld次\n", times);   // 要使用ld类型的去接收,因为times占8字节
    }

    close(timerfd); // 记得关闭描述符
    return 0;
}

测试结果

符合预期

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在C语言中,timerfd是一个用于创建定时器的系统调用。它可以与epoll结合使用,以实现定时任务的功能。timerfd_settime接口用于启动和停止定时器。通过设置it_interval和it_value字段的值来指定定时器的周期和首次超时时间。其中it_interval.tv_sec和it_interval.tv_nsec用于设置定时器的周期,单位是秒和纳秒;it_value.tv_sec和it_value.tv_nsec用于设置定时器的首次超时时间。例如,如果想要定时器每50毫秒超时一次,可以将it_interval.tv_nsec设置为50 * 1000 * 1000,并将it_value.tv_sec设置为2。这样定时器会在2秒后首次超时,并且之后每50毫秒超时一次。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [linux c++ 利用timerfd和epoll封装计时器(Timer)类](https://blog.csdn.net/hjwang1/article/details/120387987)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【用示例学习与理解C++系列】timerfd与epoll的使用](https://blog.csdn.net/SCHOLAR_II/article/details/127445837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风玉骨

爱了!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值