OMThread 类

OMThread 是框架基本活动类。其职责如下所示:

这个类是在头文件 omthread.h 中定义的。

OMThread 是每个处于活动状态的类的基类。活动类的对象:

因此,每个活动对象都有一个 OMThread 实例,该实例由以下两部分内容组成:

在缺省情况下,应用程序中至少有两个线程:计时器线程和主线程。在这种简单情况下,所有事件都在主线程事件队列中排队。

每个操作系统都具有不同的本机线程实现。

线程负责向所有在其中运行的实例提供事件服务。每个分配给对象的事件都将发送到它的相关线程。线程在事件队列中存储事件。OMThread 使用 while 循环来使用出现在队列开头的事件。

活动对象还可以为非活动对象提供服务。例如,应用程序可能有一个类 a,这个类具有状态图但仍处于活动状态,因此它继承 OMThreadOMReactive。应用程序可能还有一个类 p,这个类具有状态图,但未处于活动状态。类 p 继承 OMReactive

假定 p 正在 a 的线程下运行。每个以 p 为目标的事件都必须存储在某个位置,并且 p 没有事件队列。因此,p 将以其为目标的事件委派到 a 的事件队列,这是因为 pa 的操作系统线程中运行,并且 a 有事件队列。

如果存在以下代码行(用于生成以类 p 为目标的事件 e),那么 e 将存储在 aOMThread 事件队列中:

   p -> GEN(e)

OMThread 中,execute 方法通过对事件队列执行循环来查找更多事件。当它找到一个或多个事件时,将从事件队列中弹出第一个事件(例如 e)。此事件具有一个用于指定目标(在本例中,这是 p)的字段。然后,通知 p 对事件 e 作出反应。不必立即使用此事件 - 此事件将在事件队列中等待。是时候使用此事件时,将使用 takeEvent 方法从事件队列中弹出此事件并将其注入到 pOMReactive 中。

在 V4.0 中,对 OMProtected 的继承已替换为聚集。因此,对 OMThread 接口添加了以下内容:

属性概要
aomthread - 指定线程的“受检测”部分
endOfProcess - 指定应用程序是否处于进程末尾
eventQueue - 指定线程的事件队列
thread - 指定线程的“操作系统”部分
toGuardThread - 确定线程代码的某个部分是否将受保护
构造概要
OMThread
构造 OMThread 对象
~OMThread
销毁 OMThread 对象
方法概要
allowDeleteInThreadsCleanup
将框架线程的销毁推迟到应用程序终止且所有用户线程都被删除后进行
cancelEvent
将单一事件标记为“已被取消”(即,将事件标识更改为 Constants)。
cancelEvents
将所有以指定 OMReactive 实例为目标的事件都标记为“已被取消”(即,将事件标识更改为 Constants
cleanupAllThreads
结束应用程序中的所有线程,但主线程和运行 cleanupAllThreads 方法的线程除外
cleanupThread
提供了一个“挂钩”,以允许在不调用 DTOR 的情况下清除线程
destroyThread
销毁框架的缺省活动类或对象
doExecute
是线程主循环函数的入口点
execute
是线程主循环函数
getAOMThread
由框架用于动画用途
getEventQueue
由框架用于动画用途
getGuard
获取对 OMProtected 部分的引用
getOsHandle
返回线程的操作系统标识
getOSThreadEndClb
请求回调以结束当前操作系统线程
getStepper
由框架用于动画用途
lock
锁定线程互斥对象
omGetEventQueue
返回事件队列
queue
将线程事件循环所要处理的事件放入队列 (execute)
resume
恢复 suspend 方法所暂挂的线程
schedTm
创建超时请求并将此请求委派给 OMTimerManager
setEndOSThreadInDtor
指定是否删除正在销毁的操作系统线程
setPriority
设置正在执行的线程的优先级
setToGuardThread
设置 toGuardThread 标志
shouldGuardThread
确定线程是否受守护
start
激活线程以启动其事件处理循环
stopAllThreads
用于支持 DLL 版本的 Rational® Rhapsody® Developer for C++ 执行框架 (COM)
suspend
暂挂线程
unlock
将线程互斥对象解锁
unschedTm
取消超时请求
属性和标志

aomthread

这个受保护属性指定线程的“受检测”部分。

其定义如下所示:

AOMThread *aomthread;

AOMThread 类是在受检测应用程序中的动画框架中定义的,并且,在不受检测方式下设置为空类。

endOfProcess

这个公用属性指定应用程序是否处于进程末尾。如果是,那么必须“清除”该进程中的最后一个线程。

此标志可能的值如下所示:

其定义如下所示:

static int endOfProcess;

eventQueue

这个受保护属性指定线程的事件队列。

其定义如下所示:

OMEventQueue *eventQueue;

OMEventQueue 是在 os.h 中定义的。

thread

这个受保护属性指定线程的“操作系统”部分。

其定义如下所示:

OMOSThread *thread;

OMOSThread 类是在 os.h 中定义的。

toGuardThread

这个受保护属性确定线程代码的某个部分是否将受保护。如果此属性设置为 TRUE,那么该代码受保护。否则,该代码不受保护。

其定义如下所示:

OMBoolean toGuardThread;
OMBoolean 是在 rawtypes.h 中定义的。

toGuardThreadexecute 方法在开始执行其事件循环迭代之前检查。如果 toGuardThreadTRUE,那么 execute 将调用 OMGuard 类OMGuard 类 宏。


反馈