封装Libuv定时器 - Timer

  Libuv底层定时器采用小顶堆结构管理,即最快超时的定时器句柄会放在最上面。

Timer.h

#pragma once#include "uv.h"
#include <functional>NS_NET_UV_BEGINusing TimerEventCB = std::function<bool()>;class Timer {public:Timer();~Timer();bool Init(int TimerID, uint64_t intervalTime, const TimerEventCB& callBack);bool UnInit();bool Start();bool Stop();bool IsRunning();bool SetUvLoop(uv_loop_t* const pUvLoop);bool HandleTimerEvent();
private:int          m_timerID;uint64_t     m_intervalTime;bool         m_isStart;uv_timer_t   m_timer;uv_loop_t*   m_uvLoop;TimerEventCB m_timerEventCallBack;
};NS_NET_UV_END

Timer.cpp

#include "Timer.h"NS_NET_UV_BEGINTimer::Timer() {}Timer::~Timer() {}bool Timer::Init(int TimerID, uint64_t intervalTime, const TimerEventCB& callBack) {assert(NULL != callBack);assert(0    <= TimerID);assert(0    <= intervalTime);m_timerID = TimerID;m_isStart = false;memset(&m_timer, 0, sizeof(uv_timer_t));m_uvLoop  = nullptr;m_intervalTime       = intervalTime;m_timerEventCallBack = callBack;return true;
}bool Timer::UnInit() {return Stop();
}bool Timer::Start() {bool result = false;if (m_isStart || nullptr == m_uvLoop) {LOG_ERROR << "m_isStart is true or m_uvLoop is nullptr";goto Exit;}uv_timer_init(m_uvLoop, &m_timer);m_timer.data = this;uv_timer_start(&m_timer, OnTimer, m_intervalTime, m_intervalTime);m_isStart = true;result    = true;
Exit:return result;
}bool Timer::Stop() {if (!m_isStart) {return false;}uv_timer_stop(&m_timer);m_isStart = false;return true;
}bool Timer::IsRunning() {return m_isStart;
}bool Timer::SetUvLoop(uv_loop_t* const pUvLoop) {assert(NULL != pUvLoop);m_uvLoop = pUvLoop;return true;
}bool Timer::HandleTimerEvent() {return m_timerEventCallBack();
}NS_NET_UV_END

封装Libuv定时器 - Timer相关推荐

  1. Java定时器Timer

    Java定时器Timer 在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划 ...

  2. 第5章 定时器Timer

    第5章 定时器Timer 标签: Java多线程编程 <Java多线程编程核心技术> 个人笔记 第5章 定时器Timer 定时器Timer的使用 方法scheduleTimerTask t ...

  3. 定时器Timer使用

    一.定时器Timer基本使用 Timer timer = new Timer(); timer.schedule(TimerTask, Date);,任务需要用TimerTask封装,重写TimerT ...

  4. 【龙芯1c库】封装硬件定时器接口和使用示例

    龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库.完整源码请移步到https://gitee.com/caogos/OpenLoongsonLib1c 龙芯1c库中硬件定时器 ...

  5. java定时器timer_Java定时器Timer

    Java定时器Timer 在JDK库中,Timer类主要负责计划任务的功能,也就是在指定的时开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类,执行计划 ...

  6. Java多线程学习笔记20之定时器Timer

    详细代码见:github代码地址 本节内容: 定时器Timer的使用及分析 1) 如何实现指定时间执行任务 2) 如何实现按指定周期执行任务 第五章 定时器Timer 定时/计划功能在移动开发领域使用 ...

  7. 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )

    文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...

  8. python定时器 是线程吗_python线程定时器Timer(32)

    相对前面几篇python线程内容而言,本片内容相对比较简单,定时器 – 顾名思义,必然用于定时任务. 一.线程定时器Timer原理 原理比较简单,指定时间间隔后启动线程!适用场景:完成定时任务,例如: ...

  9. python定时器timer_python通过线程实现定时器timer的方法

    本文实例讲述了python通过线程实现定时器timer的方法.分享给大家供大家参考.具体分析如下: 这个python类实现了一个定时器效果,调用非常简单,可以让系统定时执行指定的函数 下面介绍以thr ...

最新文章

  1. CentOS7系统启动、排错、修复、破解root口令
  2. 禁止/启用angularjs相关缓存的方法
  3. linux 交叉编译 openssl
  4. matlab中利用princomp实现PCA降维
  5. C语言求最大公约数3种方法
  6. 判断手机浏览器还是桌面浏览器
  7. uml活动图 各个功能的操作流程和分支_UML建模之活动图介绍(Activity Diagram)
  8. Javascript模块模式学习分享
  9. mysql卸载时弹框,win10卸载mysql5安装mysql8
  10. Java包装类和基本数据类型的对照
  11. 数据持化技术的发展演变(SQL、JDBC、mybatis)
  12. 优化算法笔记|灰狼算法理解及Python实现
  13. java i++与++i与与之间的区别在哪里
  14. 使用 Subversion (SVN) 的方式来访问 Github
  15. C#数据类型02--结构
  16. linux系统组成之小型RedHat little linux制作二
  17. 编程不需要天赋和激情
  18. vue 将字符串最后一个字符给替换_前端开发:Vue项目实战-Music
  19. Sdut 2416 Fruit Ninja II(山东省第三届ACM省赛 J 题)(解析几何)
  20. NLPIR 汉语分词系统 (PyNLPIR) 学习手札

热门文章

  1. 5G NR CSI-RS介绍(1)-- 物理时频资源映射
  2. 4.1-4.3 什么是矩阵 矩阵的基本运算及性质
  3. CentOS下安裝Nvidia docker 2.0:[Errno 256] No more mirrors to try錯誤及解決方式
  4. 计算机试图启动宏,win7打开word提示“您试图运行的函数包含宏或需要宏语言支持的内容”如何解决...
  5. Sybase建设上海社保卡数据仓库案例
  6. i5 vs i7区别是什么,那个处理器适合您的电脑?
  7. 【SRE笔记 2022.8.16 Linux命令基础01】
  8. MySQL数据库锁详解
  9. PAT 1094 谷歌的招聘 (20 分) c语言
  10. 大学生网页作业之-个人主页、校园网站