OMThread 클래스

OMThread는 프레임워크 기본 활성 클래스입니다. 이 클래스의 역할은 다음과 같습니다.

이 클래스는 헤더 파일 omthread.h에 정의되어 있습니다.

OMThread는 활성 상태인 모든 클래스의 기본 클래스입니다. 활성 클래스의 오브젝트의 특징은 다음과 같습니다.

따라서 모든 활성 오브젝트에는 다음 두 가지 항목으로 구성된 OMThread 인스턴스가 있습니다.

기본적으로 애플리케이션에는 타이머 스레드와 main 스레드라는 최소한 두 개 이상의 스레드가 있습니다. 이와 같이 간단한 경우 모든 이벤트는 main 스레드 이벤트 큐에 대기됩니다.

모든 운영 체제에서 기본 스레드는 다르게 구현됩니다.

스레드는 자신 내에서 실행 중인 모든 인스턴스에 이벤트 서비스 제공을 담당합니다. 오브젝트에 지정된 모든 이벤트는 관련 스레드로 전송됩니다. 스레드는 이벤트 큐에 이벤트를 저장합니다. OMThread는 이벤트가 큐의 맨 앞에 나타나면 while 루프를 사용하여 이벤트를 이용합니다.

또한 활성 오브젝트는 비활성 오브젝트의 역할을 수행할 수도 있습니다. 예를 들어 애플리케이션에는 상태 차트가 있지만 활성 상태인 클래스 a가 있을 수 있습니다. 따라서 이러한 클래스는 OMThreadOMReactive에서 상속합니다. 또한 애플리케이션에는 상태 차트가 있지만 활성 상태가 아닌 클래스 p가 있을 수 있습니다. 클래스 pOMReactive에서 상속합니다.

pa의 스레드 아래에서 실행 중이라고 가정합니다. p가 대상으로 지정된 모든 이벤트는 어딘가에 저장되어야 하고 p에는 이벤트 큐가 없습니다. 따라서 p는 자신이 대상으로 지정된 이벤트를 a의 이벤트 큐에 위임합니다. 이는 pa의 운영 체제 스레드에서 실행 중이고 a에 이벤트 큐가 있기 때문입니다.

클래스 p에 대한 이벤트 e를 생성하는 다음 코드 라인을 추가하면 eaOMThread 이벤트 큐 내부에 저장됩니다.

   p -> GEN(e)

OMThread에서execute 메소드는 이벤트 큐를 순환하면서 추가 이벤트를 검색합니다. 이 메소드가 이벤트를 하나 이상 찾으면 이벤트 큐에서 첫 번째 이벤트(예: e)를 가져옵니다. 해당 이벤트에는 대상(이 예제에서는 p)을 지정하는 필드가 있습니다. 그러면 이벤트 e에 대해 반응해야 한다고 p에 알립니다. 해당 이벤트를 반드시 바로 이용할 필요는 없습니다. 이 이벤트는 이벤트 큐에서 대기합니다. 이벤트를 이용할 시간이 되면 이벤트 큐에서 해당 이벤트가 표시되어 takeEvent 메소드를 사용하여 pOMReactive로 삽입됩니다.

버전 4.0에서는OMProtected로부터의 상속이 집계로 대체되었습니다. 따라서 OMThread 인터페이스에 다음이 추가되었습니다.

속성 요약
aomthread - 스레드의 "인스트루먼테이션된" 파트를 지정합니다.
endOfProcess - 애플리케이션에서 프로세스가 종료되었는지 여부를 지정합니다.
eventQueue - 스레드의 이벤트 큐를 지정합니다.
thread - 스레드의 "os" 파트를 지정합니다.
toGuardThread - 스레드 코드 섹션이 보호되는지 여부를 판별합니다.
생성 요약
OMThread
OMThread 오브젝트를 생성합니다.
~OMThread
OMThread 오브젝트를 영구 삭제합니다.
메소드 요약
allowDeleteInThreadsCleanup
애플리케이션이 종료되고 모든 사용자 스레드가 삭제될 때까지 프레임워크 스레드 소멸을 연기합니다.
cancelEvent
단일 이벤트를 취소된 것으로 표시합니다. 즉, 이벤트 ID를 Constants로 변경합니다.
cancelEvents
지정한 OMReactive 인스턴스가 대상으로 지정된 모든 이벤트를 취소된 것으로 표시합니다. 즉, 이벤트 ID를 Constants로 변경합니다.
cleanupAllThreads
애플리케이션에서 main 스레드와 cleanupAllThreads 메소드에서 실행 중인 스레드를 제외한 모든 스레드를 "강제 종료"합니다.
cleanupThread
DTOR을 호출하지 않고 스레드를 정리할 수 있도록 "후크"를 제공합니다.
destroyThread
프레임워크의 기본 활성 클래스 또는 오브젝트를 영구 삭제합니다.
doExecute
스레드 기본 루프 함수에 대한 시작점입니다.
execute
스레드 기본 루프 함수입니다.
getAOMThread
애니메이션 용도로 프레임워크에서 사용합니다.
getEventQueue
애니메이션 용도로 프레임워크에서 사용합니다.
getGuard
OMProtected 파트에 대한 참조를 가져옵니다.
getOsHandle
스레드의 운영 체제 ID를 리턴합니다.
getOSThreadEndClb
현재 운영 체제 스레드를 종료하도록 콜백을 요청합니다.
getStepper
애니메이션 용도로 프레임워크에서 사용합니다.
lock
스레드 뮤텍스에 잠금을 설정합니다.
omGetEventQueue
이벤트 큐를 리턴합니다.
queue
스레드 이벤트 루프에서 처리하는 이벤트를 큐에 대기시킵니다(execute).
resume
suspend 메소드가 일시 중단한 스레드를 재개합니다.
schedTm
제한시간 요청을 작성하고 OMTimerManager에 해당 요청을 위임합니다.
setEndOSThreadInDtor
영구 삭제시 운영 체제 스레드가 삭제되는지 여부를 지정합니다.
setPriority
실행 중인 스레드의 우선순위를 설정합니다.
setToGuardThread
toGuardThread 플래그를 설정합니다.
shouldGuardThread
스레드가 보호되는지 여부를 판별합니다.
start
이벤트 처리 루프를 시작하도록 스레드를 활성화합니다.
stopAllThreads
C++ 실행 프레임워크(COM)용 Rational® Rhapsody® Developer의 DLL 버전을 지원하는 데 사용됩니다.
suspend
스레드를 일시중단합니다.
unlock
뮤텍스를 잠금 해제합니다.
unschedTm
제한시간 요청을 취소합니다.
속성 및 플래그

aomthread

보호된 이 속성은 스레드의 "인스트루먼테이션된" 파트를 지정합니다.

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

AOMThread *aomthread;

AOMThread 클래스는 인스트루먼테이션된 애플리케이션의 애니메이션 프레임워크에 정의되어 있으며 인스트루먼테이션되지 않은 모드에서는 빈 클래스로 설정되어 있습니다.

endOfProcess

이러한 공용 속성은 애플리케이션에서 프로세스가 종료되었는지 여부를 지정합니다. 프로세스가 종료되면 프로세스의 마지막 스레드를 "정리"해야 합니다.

이 플래그에 사용 가능한 값은 다음과 같습니다.

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

static int endOfProcess;

eventQueue

보호된 이 속성은 스레드의 이벤트 큐를 지정합니다.

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

OMEventQueue *eventQueue;

클래스 OMEventQueueos.h에 정의되어 있습니다.

스레드

보호된 이 속성은 스레드의 "os" 파트를 지정합니다.

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

OMOSThread *thread;

OMOSThread 클래스는 os.h에 정의되어 있습니다.

toGuardThread

보호된 이 속성은 스레드 코드 섹션이 보호되는지 여부를 판별합니다. 이 속성이 TRUE로 설정되면 코드가 보호됩니다. 그렇지 않은 경우 코드가 보호되지 않습니다.

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

OMBoolean toGuardThread;
OMBoolean은 rawtypes.h에 정의되어 있습니다.

toGuardThread는 이벤트 루프 반복 전에 execute 메소드에서 확인합니다. toGuardThreadTRUE이면 executeOMGuard 클래스OMGuard 클래스 매크로를 호출합니다.


피드백