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;
}