指定消息参数

消息数据是过渡上下文中使用的形参。在缺省情况下,如果消息是事件,那么消息参数的名称与事件类的自变量(数据成员)相同。

关于此任务

在状态图中,使用语法如下的伪变量 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 的情况下处理事件 dischargeFirecracker 以红色爆炸并从 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 的快捷表示法。


反馈