指定訊息參數

訊息資料是在轉移環境定義內使用的正式參數。依預設,如果訊息是事件,則訊息參數的名稱與事件類別的引數(資料成員)相同。

關於這項作業

您可使用虛擬參數 params‑>,以及下列語法,來參照狀態圖中的事件引數:

event/params->event_arg1, params->event_arg2

請考量類別 Firecracker,其會處理事件 discharge,且引數為 color。引數 color 是列舉類型 Colors,其可能的值為紅色 (0)、綠色 (1) 或藍色 (2)。在狀態圖中,您將指出想要使用轉移上的下列標籤,來在發生事件時將顏色傳遞到該事件:

discharge/params->color

當您執行具有動畫的應用程式時,您可以透過在動畫指令欄位中鍵入下列指令,來產生 discharge 事件,並將值 red 傳遞給它:

Firecracker[0]->GEN(discharge(red))

應用程式瞭解 red 作為傳遞至事件 discharge 的引數 color 的值,因為具有表示法 params->color。紅顏色會轉換為其整數值 (0),且事件進入主要執行緒的事件佇列,如下所示:

Firecracker[0]->discharge((int)color = 0)

最後,事件佇列會處理事件 discharge,並具有由 params-> 傳遞的值 redFirecracker 會顯示為紅色,並從 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();
////    Framework entries     ////
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 的速記表示法。


回饋