イベントの取得

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() 操作は、ルート状態に対しては生成されません。

フィードバック