获取事件

takeEvent() 操作从事件队列获取事件,并评估该事件是否有效触发对象当前状态转换。

关于此任务

takeEvent() 操作名称具有以下格式:

<object>_<state>_takeEvent(<object>* const <me>, 
<event ID>)

事件标识是在包规范文件顶部为事件生成的标识号。

例如,对于 HomeHeatingSystem 中的 systemControl 状态,生成以下 takeEvent() 操作:

int HomeHeatingSystem_systemControl_takeEvent(
   HomeHeatingSystem* const me, short id);

此操作具有以下实现:

int HomeHeatingSystem_systemControl_takeEvent(
   HomeHeatingSystem* const me, short id) {
   int res = eventNotConsumed;
   if(id == Timeout_id)
    {
      if(RiCTimeout_getTimeoutId((RiCTimeout*) 
         me->ric_reactive.current_event) ==
         HomeHeatingSystem_Timeout_systemControl_id)
       {
         NOTIFY_TRANSITION_STARTED(me,
            HomeHeatingSystem, "1");            
         HomeHeatingSystem_systemControl_exit(me);
         {
            /*#[ transition 1 */
            if(IS_IN(&me->theFurnace,Furnace_starting))
               RiCGEN(&me->theFurnace,motorReady());
            /*#]*/
         }
         systemControl_entDef(me);
         NOTIFY_TRANSITION_TERMINATED(me,
         HomeHeatingSystem, "1");
         res = eventConsumed;
      }
   }
   return res;
}
注: 对根状态无法生成 takeEvent() 操作。

反馈