unschedTm 方法用于取消超时请求。
在下列情况下使用此方法:
- 正在退出某种状态 - 超时不再相关。
- 对象已被销毁 - 在这种情况下,所有与此对象关联的计时器都已被销毁。
unschedTm 方法的工作方式如下:
- 如果 OMReactive 实例不存在,那么
unschedTm 将返回;否则,此方法将调用互斥对象以保护以下操作:
- 如果 id
== Constants,那么 unschedTm 将取消目标为这个特定 OMReactive 实例的所有事件。
- unschedTm 调用 isCurrentEvent 方法以确定当前事件是否已委派给此
OMReactive。如果情况如此,那么 unschedTm 将调用
findInList 方法(私有)以在到期列表中找到超时,然后从到期列表中除去此超时。
- 接下来,unschedTm 为以下各项创建三个克隆:
- unschedTm 方法将遍历整个堆,并调用 删除 方法以删除其目标为特定 OMReactive 的那些超时。
- 最后,此方法在到期列表中查找匹配的超时。它调用 findInList 方法来遍历到期列表,以查找匹配的超时。如果找到匹配的超时,那么它将调用 setlId 方法以将此超时的标识设置为 Constants,然后从到期列表中除去此超时。
- 如果 id == Constants,那么 unschedTm 仅取消该事件。
特征符RP_FRAMEWORK_DLL void unschedTm (short id,
OMReactive *c);
参数id
指定超时请求的标识标记。
如果指定了 Constants,那么 unschedTm 将取消目标为这个特定 OMReactive 实例的所有事件。如果指定了 Constants,那么
unschedTm 仅取消该超时。
c
指定指向 OMReactive 实例请求者的指针。取消超时后,此参数将指向所通知的实例。
备注- 取消超时需要执行下列两项操作中的一项:
- 从堆中删除此超时。
- 在事件队列内取消此超时(如果已分派事件队列)。这是通过遍历事件队列完成的。
- 您可以在状态图实现被覆盖的情况下使用 unschedTm。
- unschedTm 由 unschedTm 调用(后者是在
omthread.h 定义的)。