OMTimerManager 类

OMTimerManager 为所有使用单一计时器任务的线程提供计时器服务。这个类是在头文件 timer.h 中声明的。

OMTimerManager 管理超时请求并向系统对象发出超时事件。OMTimerManager 是单实例活动对象。在框架初始化期间,将会创建单实例,并且将创建单一新线程以管理超时请求。

注: 在每个由 Rational® Rhapsody® 生成的应用程序中,都有一个单独的线程为该应用程序提供计时器支持。如果您的应用程序是单线程应用程序,那么 Rational Rhapsody 生成的应用程序将有两个线程 - 一个线程用于该应用程序,另一个线程用于提供计时器支持。

OMThreadTimer 继承 OMTimerManager 并为框架和应用程序执行实际计时服务。有关 OMThreadTimer 的更多信息,请参阅 OMThreadTimer 类

OMTimerManager 可以实现两个时间模型:

模拟时间对于进行调试和算法验证而言非常有用。

模拟时间支持是在运行时提供的(在应用程序初始化期间为框架提供一个参数)。但是,要在实时与模拟时间之前切换,您需要重新生成并构建代码。

在当前版本中,将在初始化时通过 OXF::init 中的 isRealTime 参数来处理模拟时间。

以下方法可与模拟时间方式配合使用:initOMTimerManagerDefaults 类、goNext(私有)和 goNextAndPost

属性概要
overflowMark - 指定用于确定当前系统时间是否“已溢出”的值
构造概要
OMTimerManager - 构造 OMTimerManager 对象
~OMTimerManager
销毁 OMTimerManager 对象
方法概要
action - 将到期超时请求发送给相关线程,该请求随后在此线程中被插入线程的事件队列
cbkBridge
此方法是通过 timeTickCbk 私有方法获取来自操作系统的中断的途径
clearInstance
清除计时器管理器的单实例
consumeTime
在模拟时间方式下用来模拟时间使用情况
destroyTimer
清除计时器管理器单实例
getElapsedTime
返回 m_Time(即,当前系统时间)的值。
goNextAndPost
在模拟时间方式下使用
init
启动计时器节拍
initInstance
初始化单实例
instance
创建计时器管理器的单实例
resume
由框架用来在动画期间恢复计时器
set
将超时请求委派给 OMTimerManager
setElapsedTime
设置 m_Time(即,当前系统时间)的值
softUnschedTm
从到期列表中除去特定超时
suspend
由框架用来在动画期间暂挂计时器
unschedTm
取消超时请求

属性

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_TimeoverflowMark 进行比较。如果 m_Time >= overflowMark,那么 post 方法将遍历整个堆以调整每个超时请求的 dueTime,然后按以下方式重置 m_Time

m_Time &= ~overflowMark;

更新 dueTimem_Time 将使用系统资源。您应该小心监视应用程序的 m_Time


反馈