• 一个基于C++11的定时器队列(timerfd,poll实现)


    @


    前言

    最近小程序要用到定时器,找了一圈也没找到合适的,最后还是绕回来选择了muduo里面的TimerQueue,整理了下它的代码,独立了出来,因为实在懒得从头写一个- -!。

    原来的muduo中TimerQueue是专为EventLoop提供定时功能的组件,我在笔记
    muduo网络库学习笔记(三)TimerQueue定时器队列
    中解读过muduo这块代码,现在反过来,EventLoop做为TimerQueue的组件,TimerQueue启动后在后面开一个线程跑EventLoop,EventLoop里面进行阻塞的poll循环,只监听timerFd,和EventFd,从而独立出来一个单独的定时器队列。。

    优点

    [Async] [thread-safe] [based on poll] [microseconds-level]

    异步 :后台线程监视文件描述符动态。
    线程安全 : 多线程安全的 支持异步插入定时器。
    基于poll : 非休眠机制实现。
    级别 : 微妙级别。

    test

    #include <chrono>
    #include <iostream>
    #include "Logger.hpp"
    #include "TimerQueue.hpp"
    
    void test()
    {
    
      LOG_DEBUG << "[test] : test timerQue happended ";
    
      std::cout << "[test] : test timerQue happended at " << std::chrono::system_clock::now().time_since_epoch() / std::chrono::microseconds(1) << std::endl;
    
    }
    
    
    int main()
    {
    
      //Logger::setLogLevel(Logger::TRACE);
    
      TimerQueue* timer_queue = TimerQueue::GetInstance();
      timer_queue->Start();
      timer_queue->runAfter(1.0, test);
      timer_queue->runAfter(1.0, test);
      timer_queue->runAfter(3.0, test);
    
      timer_queue->runEvery(5.0, test);
      getchar();
      return 0;
    }
    
    

    ./timer_queue_test
    [test] : test timerQue happended at 1548293190811373
    [test] : test timerQue happended at 1548293190811392
    [test] : test timerQue happended at 1548293192811787
    [test] : test timerQue happended at 1548293194811927
    [test] : test timerQue happended at 1548293199812081
    [test] : test timerQue happended at 1548293204812645
    [test] : test timerQue happended at 1548293209813508

    源代码

    TimerQueue : https://github.com/BethlyRoseDaisley/TimerQueue/tree/master/TimerQueue 欢迎收藏。

  • 相关阅读:
    selenium3 + python
    selenium3 + python
    Linux 文件查找
    Linux 重定向与管道
    MySQL —— 基本查询方法
    Linux 用户和文件权限管理
    Linux bash介绍与使用
    Linux 文件操作
    Linux 文件系统简介
    Linux 帮助命令
  • 原文地址:https://www.cnblogs.com/ailumiyana/p/10313237.html
Copyright © 2020-2023  润新知