OMTimerManager 为所有使用单一计时器任务的线程提供计时器服务。这个类是在头文件 timer.h 中声明的。
OMTimerManager 管理超时请求并向系统对象发出超时事件。OMTimerManager 是单实例活动对象。在框架初始化期间,将会创建单实例,并且将创建单一新线程以管理超时请求。
OMThreadTimer 继承 OMTimerManager 并为框架和应用程序执行实际计时服务。有关 OMThreadTimer 的更多信息,请参阅 OMThreadTimer 类。
OMTimerManager 可以实现两个时间模型:
模拟时间对于进行调试和算法验证而言非常有用。
模拟时间支持是在运行时提供的(在应用程序初始化期间为框架提供一个参数)。但是,要在实时与模拟时间之前切换,您需要重新生成并构建代码。
在当前版本中,将在初始化时通过 OXF::init 中的 isRealTime 参数来处理模拟时间。
以下方法可与模拟时间方式配合使用:init、OMTimerManagerDefaults 类、goNext(私有)和 goNextAndPost。
overflowMark
这个受保护属性指定用于确定当前系统时间 (m_Time) 是否“已溢出”的值。m_Time 实现为无符号长整数;其最大值取决于实现。
其定义如下所示:
RP_FRAMEWORK_DLL static const timeUnit
overflowMark;
timeUnit 方法是在 rawtypes.h 中定义的,如下所示:
typedef unsigned long timeUnit;
overflowMark 的值是在 timer.cpp 中定义的,如下所示:
const timeUnit OMTimerManager::overflowMark =
0x80000000;
post 方法在获得指向堆中的当前超时请求的指针后,将 m_Time 与 overflowMark 进行比较。如果 m_Time >= overflowMark,那么 post 方法将遍历整个堆以调整每个超时请求的 dueTime,然后按以下方式重置 m_Time:
m_Time &= ~overflowMark;
更新 dueTime 和 m_Time 将使用系统资源。您应该小心监视应用程序的 m_Time。