OMReactive 類別是所有回應物件的架構基礎類別,會實作基本事件處理功能。 它會在檔案 omreactive.h 中進行宣告。
回應物件通常會透過狀態圖或活動圖,來處理事件。 回應物件的主要介面是 gen 及 takeTrigger 方法。
已觸發的作業是影響回應類別狀態的同步事件。 所產生的程式碼會建立事件,然後呼叫 takeTrigger 方法,以將其傳遞至回應類別。如需已觸發作業的相關資訊,請參閱分派觸發作業。
傳送者物件會套用 gen 方法,以將事件傳送至接收者(繼承自 OMReactive)。 該事件隨後會排入執行緒佇列。請參閱產生事件並排入佇列。
execute 方法會等待執行緒的事件佇列。 當事件出現在佇列中時,它會使用 takeTrigger 方法,將其分派至適當的 OMReactive 物件。
此受保護的屬性會指定回應物件(衍生自 OMReactive 的具體物件)是否也是作用中物件。回應物件會建立其自己的執行緒,同時繼承自 OMThread 物件。
如果回應物件是作用中物件,則使用者應用程式會呼叫執行緒 start;否則,不會進行此呼叫。
OMBoolean active;
此受保護的屬性會指定回應物件是否由架構自己使用(其不是使用者定義物件)。
預設值為 0 或 FALSE,由 OMReactive(回應物件的建構子)指定。
frameworkInstance 屬性可用於就其自身,對 Rational® Rhapsody® 架構進行建模。 預設值為 FALSE;您一般不會想要變更預設值。
OMBoolean frameworkInstance;
OMStartBehaviorEvent myStartBehaviorEvent;
此受保護的屬性會定義回應物件的內部狀態(相對於狀態圖中的使用者類別狀態)。
預設值為 OMRDefaultStatus,由 OMReactive(回應物件的建構子)指定。
long omrStatus;
預設值為 0 或 FALSE,由 OMReactive(回應物件的建構子)指定。基於使用者建模,toGuardReactive 會由產生程式碼自動設為 TRUE。
OMBoolean toGuardReactive;
#define eventConsumed
OMReactive::OMTakeEventCompleted
#define eventNotConsumed
OMReactive::OMTakeEventCompletedEventNotConsumed
指定 omrStatus 屬性的預設值。 由 OMReactive 使用。
const long OMRDefaultStatus = 0x00000000L;
定義 OMReactive 物件的預設執行緒。預設值為 0 或 NULL,這告知 OMReactive 物件在系統預設作用中類別上處理其事件。
#define OMDefaultThread 0
用於設定及取得儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以停止事件分派。
OMRInDtor 不會提供互斥保護(嘗試將事件分派至其他執行緒上已刪除的類別)。 如果您想要提供互斥保護,請參閱 Rational Rhapsody 產生程式碼文件。
const long OMRInDtor = 0x00020000L;
用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以判定在所產生程式碼中是否進行空值轉移(沒有觸發程式的轉移)。
const long OMRNullConfig = 0x00000001L;
用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以判定 OMReactive 實例是否應在狀態機器中進行空值轉移。
const long OMRNullConfigMask = 0x0000FFFFL;
OMRShouldCompleteStartBehavior
用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以判定呼叫 startBehavior 時的進入狀態機器作業是否完成,如果沒完成,是否進行其他空值轉移。
如果 shouldCompleteRun 方法傳回 TRUE omrStatus,則 startBehavior 方法會設定此位元。
此位元由 processEvent 方法在第一個事件上重設。
const long OMRShouldCompleteStartBehavior =
0x00080000L;
用於取得及設定儲存在 omrStatus 中的 OMReactive 狀態。它與 omrStatus 一起使用,以判定在回應物件在其狀態機器中呼叫到終止連接器時,是否會由其作用中物件刪除。這麼做可讓靜態配置的物件在其狀態機器中具有終止連接器。
const long OMRShouldDelete = 0x00040000L;
用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以容許回應實例的作用中實例安全地毀損該回應實例。
const long OMRShouldTerminate = 0x00010000L;
產生新事件。 GEN 巨集使用 gen 方法,然後呼叫 new 運算子來建立新事件。
#define GEN (event) gen (new event)
從 GUI 產生事件。GEN_BY_GUI 巨集使用 gen 方法,然後呼叫 new 運算子來建立新事件。OMGui 會指定 GUI 執行緒。
#define GEN_BY_GUI (event) gen ((OMEvent*)
(new event), OMGui)
從傳送者物件產生新事件至接收者物件。它會指定傳送者,通常用於從外部元素(如 GUI)產生事件。GEN_BY_X 巨集使用 gen 方法,然後呼叫 new 運算子(將傳送者作為參數)來建立新事件。
#define GEN_BY_X (event, sender) gen (new event,
sender)
從岔斷服務申請 (ISR) 產生事件。GEN_ISR 巨集會使用 gen 方法(genFromISR 參數指定為 TRUE),以從 ISR 建立新事件。
#define GEN_ISR (event) gen (event, TRUE)
對於 VxWorks,GEN_ISR 會產生具有緊急優先順序的事件,該事件會置於事件佇列的開頭。 如果在處理第一個事件之前,從 GEN_ISR 發生另一個事件,則該事件會置於先前事件的前面。 對於 VxWorks,實作 GEN_ISR 的目的是為了解決如下使用案例:回應物件具有「一般」事件流程,且不時地取得置於佇列前面的單一高優先順序事件,以供立即耗用。
如果有激增的 GEN_ISR 事件注入系統,則您可以註銷架構中優先順序的設定,以利用相同優先順序,來處理岔斷的事件。 在 OMBoolean VxOSMessageQueue::put(void* m, OMBoolean fromISR) 中,註銷行 priority = MSG_PRI_URGENT。
此公用關係會指定 OMReactive 實例的作用中或現行事件(正在處理的事件)。只有在事件取自事件佇列時,才會指派關係。
預設值為 NULL,由 OMReactive(回應物件的建構子)指定。
OMEvent *event;
與所產生程式碼協同作業,用於保護事件耗用在事件與已觸發的作業之間不互斥。
如果使用者回應類別具有受保護的觸發作業,則此關係會設為回應類別的 OMProtected 組件,且在呼叫 processEvent 之前,takeEvent 方法會鎖定保護。
const OMProtected * m_eventGuard;
此受保護的關係會指定針對回應物件,將事件排入佇列並分派事件(以便事件在作用中類別的執行緒上耗用)的類別。
這是執行緒與回應類別之間的單向關係。 執行緒不瞭解其回應類別,它可能有很多回應類別。 不過,回應類別與其執行緒有關係,由 myThread 指定。
OMThread *myThread;
此關係會定義 OMReactive 狀態圖的根狀態(系統使用可重複使用的狀態圖實作時)。
預設值為 NULL,由 OMReactive(回應物件的建構子)指定。
OMComponentState* rootState;