進入狀態

enter() 作業可讓物件在其順利收到觸發且已傳遞任何可能的保護條件之後,進入某個狀態。enter() 作業也會在進入狀態時執行任何使用者定義的動作

關於這項作業

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

<object>_<state>_enter(<object*> const <me>)

例如,系統會針對 HomeHeatingSystem 的 systemControl 狀態產生下列 enter() 作業:

void HomeHeatingSystem_systemControl_enter(
   HomeHeatingSystem* const me);

enter() 作業會將狀態為正要離開(根據狀態圖)的 <state>_subState<state>_active 成員設為正要進入的狀態。例如,HomeHeatingSystem systemControl 狀態的 enter() 作業會將 rootState(前一個狀態)的這兩個成員設為 systemControl 狀態(正要進入的狀態),如下所示:

void HomeHeatingSystem_systemControl_enter(
   HomeHeatingSystem* const me) {
   NOTIFY_STATE_ENTERED(me, HomeHeatingSystem,
      "ROOT.systemControl");
   me->rootState_subState = HomeHeatingSystem_systemControl;
   me->rootState_active = HomeHeatingSystem_systemControl;
   RiCTask_schedTm(me->ric_reactive.myTask, 3000,
      HomeHeatingSystem_Timeout_systemControl_id,
         &me->ric_reactive, "ROOT.systemControl");
}
註: 系統不會為根狀態產生 enter() 作業。

意見回饋