OMReactive 클래스

OMReactive 클래스는 모든 반응 오브젝트의 기본 클래스이고 기본 이벤트 처리 기능을 구현합니다. 이 클래스는 omreactive.h 파일에 선언되어 있습니다.

반응 오브젝트는 일반적으로 상태 차트 또는 활동 다이어그램을 통해 이벤트를 처리합니다. 반응 오브젝트의 기본 인터페이스는 gen and takeTrigger 메소드입니다.

트리거된 오퍼레이션은 반응 클래스 상태에 영향을 미치는 동기 이벤트입니다. 생성된 코드는 이벤트를 작성한 다음 takeTrigger 메소드를 호출하여 반응 클래스에 전달합니다. 트리거된 오퍼레이션에 대한 추가 정보는 트리거된 오퍼레이션 디스패치의 내용을 참조하십시오.

송신자 오브젝트는 gen 메소드를 OMReactive에서 상속한 이벤트를 수신자에게 전송하는 데 적용합니다. 그런 다음 스레드 내부에서 해당 이벤트를 큐에 대기시킵니다. 이벤트 생성 및 큐에 넣기의 내용을 참조하십시오.

execute 메소드는 스레드의 이벤트 큐에서 대기합니다. 큐에 이벤트가 있으면 takeTrigger 메소드를 사용하여 적절한 OMReactive 오브젝트로 디스패치합니다.

속성 요약
active - 반응 오브젝트(OMReactive에서 파생된 구체적 오브젝트)가 활성 오브젝트인지 여부를 지정합니다.
frameworkInstance - 반응 오브젝트가 프레임워크 자체에서 사용되는지 여부를 지정합니다(사용자 정의 오브젝트 아님).
myStartBehaviorEvent - 기본 상태 전이의 일부로 널 상태 전이가 있는 오브젝트를 활성화합니다.
omrStatus - 반응 오브젝트의 내부 상태(상태 차트의 사용자 클래스 상태와 반대)를 정의합니다.
toGuardReactive - 이벤트 이용이 뮤텍스(2진 세마포어)로 보호되도록 지정합니다.
상수 요약
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 오브젝트에서 상속합니다.

기본값은 0 또는 FALSE입니다.

반응 오브젝트가 활성 오브젝트이면 사용자 애플리케이션이 start 스레드를 호출합니다. 그렇지 않은 경우 호출하지 않습니다.

이는 다음과 같이 정의합니다.

OMBoolean active;

frameworkInstance

보호된 이 속성은 반응 오브젝트가 프레임워크 자체에서 사용되는지 여부를 지정합니다(사용자 정의 오브젝트 아님).

기본값은 0 또는 FALSE이고 반응 오브젝트의 생성자인 OMReactive가 지정합니다.

frameworkInstance 속성은 자체적으로 Rational® Rhapsody® 프레임워크를 모델링하는 데 사용할 수 있습니다. 기본값은 FALSE입니다. 일반적으로 기본값을 변경하지 않습니다.

이는 다음과 같이 정의합니다.

OMBoolean frameworkInstance;

myStartBehaviorEvent

보호된 이 속성은 기본 상태 전이의 일부로 널 상태 전이가 있는 오브젝트를 활성화합니다.

이는 다음과 같이 정의합니다.

OMStartBehaviorEvent myStartBehaviorEvent;

omrStatus

보호된 이 속성은 반응 오브젝트의 내부 상태(상태 차트의 사용자 클래스 상태와 반대)를 정의합니다.

기본값은 OMRDefaultStatus이고 반응 오브젝트의 생성자인 OMReactive가 지정합니다.

이는 다음과 같이 정의합니다.

long omrStatus;

toGuardReactive

보호된 이 속성은 이벤트 이용이 뮤텍스(2진 세마포어)로 보호되도록 지정합니다.

기본값은 0 또는 FALSE이고 반응 오브젝트의 생성자인 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 또는 널입니다. 즉, 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 내부 상태를 설정하고 가져오는 데 사용됩니다. OMReactive 인스턴스가 상태 머신에서 널 상태 전이를 사용해야 하는지 여부를 판별하는 데 omrStatus와 함께 사용됩니다.

이는 다음과 같이 정의합니다.

const long OMRNullConfigMask = 0x0000FFFFL;

OMRShouldCompleteStartBehavior

omrStatus에 저장된 OMReactive 내부 상태를 설정하고 가져오는 데 사용됩니다. startBehavior에 대한 호출 시 상태 머신으로 전환이 완료되었는지 여부와 그렇지 않은 경우 사용할 추가 널 상태 전이가 있는지 여부를 omrStatus와 함께 판별합니다.

shouldCompleteRun 메소드가 TRUEomrStatus를 리턴하는 경우 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 매크로는 genFromISR 매개변수가 TRUE로 지정된 gen 메소드를 사용하여 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 인스턴스의 활성 이벤트 또는 현재 이벤트(현재 처리 중인 이벤트)를 지정합니다. 이러한 관계는 이벤트 큐에서 이벤트를 가져온 경우에만 지정됩니다.

기본값은 널이고 반응 오브젝트의 생성자인 OMReactive가 지정합니다.

관계는 이는 다음과 같이 정의합니다.

OMEvent *event;

m_eventGuard

이벤트와 트리거된 오퍼레이션 간에 이벤트가 상호 배타적으로 이용되지 않도록 생성된 코드와 함께 사용됩니다.

사용자 반응 클래스에 트리거된 보호 오퍼레이션이 있는 경우 이 관계는 반응 클래스의 OMProtected 부분으로 설정되고 takeEvent 메소드는 processEvent 호출 전에 보호를 잠급니다.

이는 다음과 같이 정의합니다.

const OMProtected * m_eventGuard;

myThread

보호된 이러한 관계는 반응 오브젝트에 대해 이벤트를 큐에 대기시키고 이벤트를 디스패치하는(따라서 이벤트가 활성 클래스의 스레드에서 이용됨) 활성 클래스를 지정합니다.

스레드와 반응 클래스 간에는 단방향 관계가 있습니다. 스레드는 자신의 반응 클래스를 인식하지 않습니다. 반응 클래스가 많을 수 있습니다. 그러나 반응 클래스에는 myThread가 지정한 스레드에 대한 관계가 있습니다.

관계는 이는 다음과 같이 정의합니다.

OMThread *myThread;

rootState

이 관계는 시스템에서 재사용가능한 상태 차트 구현을 사용 중인 경우 OMReactive 상태 차트의 루트 상태를 정의합니다.

기본값은 널이고 반응 오브젝트의 생성자인 OMReactive가 지정합니다.

이는 다음과 같이 정의합니다.

OMComponentState* rootState;

OMComponentState 클래스는 state.h에 정의되어 있습니다.


피드백