OMReactive 類別

OMReactive 類別是所有回應物件的架構基礎類別,會實作基本事件處理功能。 它會在檔案 omreactive.h 中進行宣告。

回應物件通常會透過狀態圖或活動圖,來處理事件。 回應物件的主要介面是 gentakeTrigger 方法。

已觸發的作業是影響回應類別狀態的同步事件。 所產生的程式碼會建立事件,然後呼叫 takeTrigger 方法,以將其傳遞至回應類別。如需已觸發作業的相關資訊,請參閱分派觸發作業

傳送者物件會套用 gen 方法,以將事件傳送至接收者(繼承自 OMReactive)。 該事件隨後會排入執行緒佇列。請參閱產生事件並排入佇列

execute 方法會等待執行緒的事件佇列。 當事件出現在佇列中時,它會使用 takeTrigger 方法,將其分派至適當的 OMReactive 物件。

屬性摘要
active - 指定回應物件(衍生自 OMReactive 的具體物件)是否也是作用中物件
frameworkInstance - 指定回應物件是否由架構自己使用(其不是使用者定義物件)
myStartBehaviorEvent - 啟動將空值轉移作為預設轉移一部分的物件
omrStatus - 定義回應物件的內部狀態(相對於狀態圖中的使用者類別狀態)
toGuardReactive - 指定事件耗用受互斥旗標(二進位號誌)保護
常數摘要
eventConsumed - 指定已耗用事件
eventNotConsumed - 指定已完成事件但未耗用。
OMRDefaultStatus - 指定 omrStatus 屬性的預設值
OMDefaultThread - 定義 OMReactive 物件的預設執行緒
OMRInDtor - 停止事件分派
OMRNullConfig - 判定在所產生程式碼中是否進行空值轉移(沒有觸發程式的轉移)
OMRNullConfigMask - 判定 OMReactive 實例是否應在狀態機器中進行空值轉移
OMRShouldCompleteStartBeh avior - 判定呼叫 startBehavior 時的進入狀態機器作業是否完成,如果沒完成,是否進行其他空值轉移
OMRShouldDelete - 判定在回應物件在其狀態機器中呼叫到終止連接器時,是否會由其作用中物件刪除
OMRShouldTerminate - 容許回應實例的作用中實例安全地毀損該回應實例
巨集摘要
GEN - 產生新事件
GEN_BY_GUI - 從 GUI 產生事件
GEN_BY_X - 從傳送者物件產生新事件至接收者物件
GEN_ISR - 從岔斷服務申請 (ISR) 產生事件
關係摘要
event - 指定 OMReactive 實例的作用中或現行事件(正在處理的事件)
m_eventGuard - 與所產生程式碼協同作業,用於保護事件耗用在事件與已觸發的作業之間不互斥
myThread - 指定針對回應物件,將事件排入佇列並分派事件(以便事件在作用中類別的執行緒上耗用)的類別
rootState - 定義 OMReactive 狀態圖的根狀態(系統使用可重複使用的狀態圖實作時)
建構摘要
OMReactive
建構 OMReactive 物件
~OMReactive
毀損 OMReactive 物件
方法摘要
cancelEvents
取消回應物件的所有排入佇列事件。
processEvent
是主要事件耗用方法。
discarnateTimeout
毀損回應物件的逾時物件。
doBusy
將值設為 1 或 TRUE
gen
由傳送端物件用來將事件傳送至接收端物件。
_gen
將傳送至回應物件的事件排入佇列。
getCurrentEvent
取得目前處理的事件。
getThread
擷取與回應物件相關聯的執行緒。
handleEventNotConsumed
在回應類別未耗用事件時進行呼叫。
handleTONotConsumed
在回應類別未耗用已觸發作業時進行呼叫。
incarnateTimeout
建立要在回應物件上呼叫的逾時物件。
inNullConfig
判定 OMReactive 實例是否應在狀態機器中進行空值轉移(沒有觸發程式的情況下轉移)。
isActive
決定回應物件是否也是作用中物件。
isBusy
傳回屬性的現行值。
isCurrentEvent
判定指定的 ID 是否符合目前處理的事件。
isFrameworkInstance
判定屬性的現行值。
isInDtor
判定是否停止事件分派。
isValid
確保不會刪除回應類別。
popNullConfig
在進行空值轉移之後,減少屬性。
pushNullConfig
計算空值轉移數目,並在結束狀態之後,增加 omrStatus 屬性。
registerWithOMReactive
在動畫架構中,將使用者實例登錄為回應類別
rootState_dispatchEvent
耗用實際狀態圖內的事件。
rootState_entDef
透過進行預設轉移,來起始設定狀態圖。
rootState_serializeStates
是執行實際事件消耗的虛擬方法。
runToCompletion
進行所有空值轉移(如果有的話),這些轉移可在耗用事件之後進行。
serializeStates
在動畫期間呼叫,以傳送狀態資訊。
setCompleteStartBehavior
設定屬性的值。
setEventGuard
用於設定事件保護旗標。
setFrameworkInstance
變更屬性的值。
setInDtor
指定停止事件分派。
setMaxNullSteps
設定可在狀態圖中循序進行的空值轉移(沒有觸發程式的轉移)數目上限。
setShouldDelete
指定在回應物件在其狀態機器中呼叫到終止連接器時,是否會由其作用中物件刪除。
setShouldTerminate
指定回應實例可由其作用中實例安全地毀損。
setThread
設定回應物件的執行緒。
setToGuardReactive
指定屬性的值。
shouldCompleteRun
檢查值,以判定是否存在要進行的空值轉移。
shouldCompleteStartBehavior
檢查啟動行為狀態。
shouldDelete
判定在回應物件在其狀態機器中呼叫到終止連接器時,是否會由其作用中物件刪除。
shouldTerminate
判定回應實例可由其作用中實例安全地毀損。
startBehavior
起始設定行為機制,並在處理任何事件之前,在狀態圖中進行起始(預設)轉移。
takeEvent
是由事件迴圈(在執行緒內)用來使回應物件處理事件。
takeTrigger
耗用觸發的作業事件(同步的事件)。
terminate
設定 OMReactive 實例,以終止狀態(狀態圖進入終止連接器)。
undoBusy
sm_busy 屬性的值設為 0 或 FALSE
屬性與定義

作用中

此受保護的屬性會指定回應物件(衍生自 OMReactive 的具體物件)是否也是作用中物件。回應物件會建立其自己的執行緒,同時繼承自 OMThread 物件。

預設值為 0FALSE

如果回應物件是作用中物件,則使用者應用程式會呼叫執行緒 start;否則,不會進行此呼叫。

其定義方式如下:

OMBoolean active;

frameworkInstance

此受保護的屬性會指定回應物件是否由架構自己使用(其不是使用者定義物件)。

預設值為 0FALSE,由 OMReactive(回應物件的建構子)指定。

frameworkInstance 屬性可用於就其自身,對 Rational® Rhapsody® 架構進行建模。 預設值為 FALSE;您一般不會想要變更預設值。

其定義方式如下:

OMBoolean frameworkInstance;

myStartBehaviorEvent

此受保護的屬性會啟動將空值轉移作為預設轉移一部分的物件。

其定義方式如下:

OMStartBehaviorEvent myStartBehaviorEvent;

omrStatus

此受保護的屬性會定義回應物件的內部狀態(相對於狀態圖中的使用者類別狀態)。

預設值為 OMRDefaultStatus,由 OMReactive(回應物件的建構子)指定。

其定義方式如下:

long omrStatus;

toGuardReactive

此受保護的屬性會指定事件耗用受互斥旗標(二進位號誌)保護。

預設值為 0FALSE,由 OMReactive(回應物件的建構子)指定。基於使用者建模,toGuardReactive 會由產生程式碼自動設為 TRUE

其定義方式如下:

OMBoolean toGuardReactive;
常數

eventConsumed

指定已耗用事件。其定義方式如下:

#define eventConsumed 
    OMReactive::OMTakeEventCompleted

eventNotConsumed

指定已完成事件但未耗用。其定義方式如下:

#define eventNotConsumed 
    OMReactive::OMTakeEventCompletedEventNotConsumed

OMRDefaultStatus

指定 omrStatus 屬性的預設值。 由 OMReactive 使用。

其定義方式如下:

const long OMRDefaultStatus = 0x00000000L;

OMDefaultThread

定義 OMReactive 物件的預設執行緒。預設值為 0 或 NULL,這告知 OMReactive 物件在系統預設作用中類別上處理其事件。

其定義方式如下:

#define OMDefaultThread 0

OMRInDtor

用於設定及取得儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以停止事件分派。

OMRInDtor 不會提供互斥保護(嘗試將事件分派至其他執行緒上已刪除的類別)。 如果您想要提供互斥保護,請參閱 Rational Rhapsody 產生程式碼文件。

其定義方式如下:

const long OMRInDtor = 0x00020000L;

OMRNullConfig

用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以判定在所產生程式碼中是否進行空值轉移(沒有觸發程式的轉移)。

其定義方式如下:

const long OMRNullConfig = 0x00000001L;

OMRNullConfigMask

用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以判定 OMReactive 實例是否應在狀態機器中進行空值轉移。

其定義方式如下:

const long OMRNullConfigMask = 0x0000FFFFL;

OMRShouldCompleteStartBehavior

用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以判定呼叫 startBehavior 時的進入狀態機器作業是否完成,如果沒完成,是否進行其他空值轉移。

如果 shouldCompleteRun 方法傳回 TRUE omrStatus,則 startBehavior 方法會設定此位元。

此位元由 processEvent 方法在第一個事件上重設。

其定義方式如下:

const long OMRShouldCompleteStartBehavior =
    0x00080000L;

OMRShouldDelete

用於取得及設定儲存在 omrStatus 中的 OMReactive 狀態。它與 omrStatus 一起使用,以判定在回應物件在其狀態機器中呼叫到終止連接器時,是否會由其作用中物件刪除。這麼做可讓靜態配置的物件在其狀態機器中具有終止連接器。

其定義方式如下:

const long OMRShouldDelete = 0x00040000L;

OMRShouldTerminate

用於取得及設定儲存在 omrStatus 中的 OMReactive 內部狀態。它與 omrStatus 一起使用,以容許回應實例的作用中實例安全地毀損該回應實例。

其定義方式如下:

const long OMRShouldTerminate = 0x00010000L;
巨集

GEN

產生新事件。 GEN 巨集使用 gen 方法,然後呼叫 new 運算子來建立新事件。

巨集定義如下:

#define GEN (event) gen (new event)

GEN_BY_GUI

從 GUI 產生事件。GEN_BY_GUI 巨集使用 gen 方法,然後呼叫 new 運算子來建立新事件。OMGui 會指定 GUI 執行緒。

巨集定義如下:

#define GEN_BY_GUI (event) gen ((OMEvent*)
    (new event), OMGui)

OMGuiaoxf.h 中定義。

GEN_BY_X

從傳送者物件產生新事件至接收者物件。它會指定傳送者,通常用於從外部元素(如 GUI)產生事件。GEN_BY_X 巨集使用 gen 方法,然後呼叫 new 運算子(將傳送者作為參數)來建立新事件。

巨集定義如下

#define GEN_BY_X (event, sender) gen (new event,
    sender)

GEN_ISR

從岔斷服務申請 (ISR) 產生事件。GEN_ISR 巨集會使用 gen 方法(genFromISR 參數指定為 TRUE),以從 ISR 建立新事件。

使用者負責配置事件;GEN_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;

m_eventGuard

與所產生程式碼協同作業,用於保護事件耗用在事件與已觸發的作業之間不互斥。

如果使用者回應類別具有受保護的觸發作業,則此關係會設為回應類別的 OMProtected 組件,且在呼叫 processEvent 之前,takeEvent 方法會鎖定保護。

其定義方式如下:

const OMProtected * m_eventGuard;

myThread

此受保護的關係會指定針對回應物件,將事件排入佇列並分派事件(以便事件在作用中類別的執行緒上耗用)的類別。

這是執行緒與回應類別之間的單向關係。 執行緒不瞭解其回應類別,它可能有很多回應類別。 不過,回應類別與其執行緒有關係,由 myThread 指定。

關係定義如下:

OMThread *myThread;

rootState

此關係會定義 OMReactive 狀態圖的根狀態(系統使用可重複使用的狀態圖實作時)。

預設值為 NULL,由 OMReactive(回應物件的建構子)指定。

其定義方式如下:

OMComponentState* rootState;

OMComponentState 類別在 state.h 中定義。


意見回饋