在状态图中,使用语法如下的伪变量 params‑> 来引用事件自变量:
event/params->event_arg1, params->event_arg2
假定类 Firecracker 处理事件 discharge,并且该事件带有自变量 color。自变量 color 是枚举类型 Colors,其可能的值为 red (0)、green (1) 或 blue (2)。在状态图中,使用过渡上的以下标签指示要在该事件发生时将颜色传递到该事件:
discharge/params->color
以动画方式运行应用程序时,通过在动画命令字段中输入以下命令,可以生成 discharge 事件并将值 red 传递到该事件:
Firecracker[0]->GEN(discharge(red))
params->color 表示法使应用程序理解 red 是要传递到事件 discharge 的自变量 color 的值。颜色 red 将转换为相应整数值 (0),并且该事件将以如下方式进入主线程的事件队列:
Firecracker[0]->discharge((int)color = 0)
最后,事件队列在通过 params-> 传递值 red 的情况下处理事件 discharge。Firecracker 以红色爆炸并从 ready 过渡到 discharged 状态。
params-> 机制的工作方式如下:您创建事件并对其指定自变量时,产品将生成从 OMEvent 派生的事件类并将这些自变量用作它的特性。事件的代码在包文件中生成。
以下样本代码说明事件 discharge,此事件有一个名为 color 的自变量。此代码在 Default 包的头文件中生成:
//-------------------------------------------------------
// Default.h
//-------------------------------------------------------
class discharge;
class Firecracker;
enum Colors {red, green, blue};
class discharge : public OMEvent {
DECLARE_META_EVENT
//// User explicit entries ////
public :
Colors color;
//// User implicit entries ////
public :
// Constructors and destructors:
discharge();
//// 框架条目 ////
public :
discharge(Colors p_color);
// This constructor is need in code instrumentation
discharge(int p_color);
};
当 Firecracker 事件队列准备好接收事件 discharge 时,它将调用 SETPARAMS(discharge)。SETPARAMS 是在 oxf\state.h 中定义的宏,如下所示:
#define SETPARAMS(type) type *params; params=(type*)event
调用 SETPARAMS(discharge) 将分配一个变量 params,此变量是指向类型为 discharge 的事件的类型指针。在过渡的动作部分中,可以使用 params->color 作为 discharge‑>color 的快捷表示法。