Fast DDS中的定时器

目录

定时器使用

Fast DDS中的定时器主要有三个类组成:ResourceEvent,TimedEventImpl, TimedEvent。

ResourceEvent中管理定时器线程,当用户启动定时器时,需要开启ResourceEvent中的定时器线程,具体有以下步骤:

  1. 创建一个TimeEvent对象。在创建对象时,你需要提供一个回调函数,以及一个时间间隔。
  2. 启动TimeEvent。你可以调用TimeEvent的restart()函数来启动或重启定时器。
  3. 在回调函数中处理定时事件。当定时器到达预设的时间间隔时,会自动调用你提供的回调函数。
  4. 停止TimeEvent。你可以调用TimeEvent的cancel()函数来停止定时器。

使用代码如下:

cpp 复制代码
// 定义两个变量:
ResourceEvent test_resource_;
TimedEvent* test_timer_{nullptr};
// 开启ResourceEvent中的定时器,并创建TimedEvent实例:
test_timer_= new TimedEvent(test_resource_, 
                                           std::bind(&TestClass::timer_callback, this), 
                                           interval_time_.minimum_separation.seconds * 1000 + att.interval_time_.minimum_separation.nanosec / 1000000
                                      );
test_timer_->restart_timer();

此时就开始按照指定的周期开始调用定时器函数&TestClass::timer_callback。

代码分析

类图如下:

TODO

第一步,初始化一个ResourceEvent 实例。

ResourceEvent 中的变量说明:

cpp 复制代码
std::atomic<bool> stop_{ false };  // 定时器线程是否执行
TimedMutex mutex_;    // 用来保护ResourceEvent内部的数据成员
    //! Used to warn about changes on allow_vector_manipulation_.
    TimedConditionVariable cv_manipulation_;

    //! Flag used to allow a thread to manipulate the timer collections when the execution thread is not using them.
    bool allow_vector_manipulation_ = true;

    //! Used to warn there are new TimedEventImpl objects to be processed.
    TimedConditionVariable cv_;

    //! 创建的定时器个数
    size_t timers_count_ = 0;

    //! Collection of events pending update action.
    std::vector<TimedEventImpl*> pending_timers_;

    //! Collection of registered events waiting completion.
    std::vector<TimedEventImpl*> active_timers_;

    //! Prevents iterator invalidation when active_timers are manipulated inside loops
    std::atomic<bool> skip_checking_active_timers_;

    //! 当前时间
    std::chrono::steady_clock::time_point current_time_;

    //! 定时器线程
    std::thread thread_;
相关推荐
无风听海8 小时前
深入剖析 YARP 的 Transforms:构建灵活的反向代理转换管道
后端·中间件·asp.net
王老师青少年编程10 小时前
csp信奥赛C++高频考点专项训练之字符串 --【子串查找】:[NOIP 2009 提高组] 潜伏者
c++·字符串·csp·高频考点·信奥赛·子串查找·潜伏者
初願致夕霞10 小时前
基于系统调用的Linux网络编程——UDP与TCP
linux·网络·c++·tcp/ip·udp
小小de风呀12 小时前
de风——【从零开始学C++】(五):内存管理
开发语言·c++
CHANG_THE_WORLD13 小时前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
螺丝钉的扭矩一瞬间产生高能蛋白14 小时前
QT的C++接口基础用法
c++·qt·嵌入式软件·嵌入式linux·linux应用
智者知已应修善业15 小时前
【51单片机模拟生日蜡烛】2023-10-10
c++·经验分享·笔记·算法·51单片机
智者知已应修善业15 小时前
【51单片机如何让LED灯从一亮到八,再从八亮到一】2023-10-13
c++·经验分享·笔记·算法·51单片机
qeen8715 小时前
【数据结构】二叉树相关经典函数C语言实现
c语言·数据结构·c++·笔记·学习·算法·二叉树
良木生香15 小时前
【C++初阶】STL——List从入门到应用完全指南(1)
开发语言·数据结构·c++·程序人生·算法·蓝桥杯·学习方法