執行事件

takeEvent() 作業會從事件佇列取出事件,並評估事件是否有效以觸發物件從其現行狀態中轉移。

關於這項作業

takeEvent() 作業名稱具有下列格式:

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

事件 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() 作業。

回饋