OMThread는 프레임워크 기본 활성 클래스입니다. 이 클래스의 역할은 다음과 같습니다.
이 클래스는 헤더 파일 omthread.h에 정의되어 있습니다.
OMThread는 활성 상태인 모든 클래스의 기본 클래스입니다. 활성 클래스의 오브젝트의 특징은 다음과 같습니다.
따라서 모든 활성 오브젝트에는 다음 두 가지 항목으로 구성된 OMThread 인스턴스가 있습니다.
기본적으로 애플리케이션에는 타이머 스레드와 main 스레드라는 최소한 두 개 이상의 스레드가 있습니다. 이와 같이 간단한 경우 모든 이벤트는 main 스레드 이벤트 큐에 대기됩니다.
스레드는 자신 내에서 실행 중인 모든 인스턴스에 이벤트 서비스 제공을 담당합니다. 오브젝트에 지정된 모든 이벤트는 관련 스레드로 전송됩니다. 스레드는 이벤트 큐에 이벤트를 저장합니다. OMThread는 이벤트가 큐의 맨 앞에 나타나면 while 루프를 사용하여 이벤트를 이용합니다.
또한 활성 오브젝트는 비활성 오브젝트의 역할을 수행할 수도 있습니다. 예를 들어 애플리케이션에는 상태 차트가 있지만 활성 상태인 클래스 a가 있을 수 있습니다. 따라서 이러한 클래스는 OMThread 및 OMReactive에서 상속합니다. 또한 애플리케이션에는 상태 차트가 있지만 활성 상태가 아닌 클래스 p가 있을 수 있습니다. 클래스 p는 OMReactive에서 상속합니다.
p가 a의 스레드 아래에서 실행 중이라고 가정합니다. p가 대상으로 지정된 모든 이벤트는 어딘가에 저장되어야 하고 p에는 이벤트 큐가 없습니다. 따라서 p는 자신이 대상으로 지정된 이벤트를 a의 이벤트 큐에 위임합니다. 이는 p가 a의 운영 체제 스레드에서 실행 중이고 a에 이벤트 큐가 있기 때문입니다.
클래스 p에 대한 이벤트 e를 생성하는 다음 코드 라인을 추가하면 e는 a의 OMThread 이벤트 큐 내부에 저장됩니다.
p -> GEN(e)
OMThread에서execute 메소드는 이벤트 큐를 순환하면서 추가 이벤트를 검색합니다. 이 메소드가 이벤트를 하나 이상 찾으면 이벤트 큐에서 첫 번째 이벤트(예: e)를 가져옵니다. 해당 이벤트에는 대상(이 예제에서는 p)을 지정하는 필드가 있습니다. 그러면 이벤트 e에 대해 반응해야 한다고 p에 알립니다. 해당 이벤트를 반드시 바로 이용할 필요는 없습니다. 이 이벤트는 이벤트 큐에서 대기합니다. 이벤트를 이용할 시간이 되면 이벤트 큐에서 해당 이벤트가 표시되어 takeEvent 메소드를 사용하여 p의 OMReactive로 삽입됩니다.
버전 4.0에서는OMProtected로부터의 상속이 집계로 대체되었습니다. 따라서 OMThread 인터페이스에 다음이 추가되었습니다.
보호된 이 속성은 스레드의 "인스트루먼테이션된" 파트를 지정합니다.
AOMThread *aomthread;
AOMThread 클래스는 인스트루먼테이션된 애플리케이션의 애니메이션 프레임워크에 정의되어 있으며 인스트루먼테이션되지 않은 모드에서는 빈 클래스로 설정되어 있습니다.
이러한 공용 속성은 애플리케이션에서 프로세스가 종료되었는지 여부를 지정합니다. 프로세스가 종료되면 프로세스의 마지막 스레드를 "정리"해야 합니다.
static int endOfProcess;
OMEventQueue *eventQueue;
클래스 OMEventQueue는 os.h에 정의되어 있습니다.
보호된 이 속성은 스레드의 "os" 파트를 지정합니다.
OMOSThread *thread;
OMOSThread 클래스는 os.h에 정의되어 있습니다.
보호된 이 속성은 스레드 코드 섹션이 보호되는지 여부를 판별합니다. 이 속성이 TRUE로 설정되면 코드가 보호됩니다. 그렇지 않은 경우 코드가 보호되지 않습니다.
OMBoolean toGuardThread; OMBoolean은 rawtypes.h에 정의되어 있습니다.
toGuardThread는 이벤트 루프 반복 전에 execute 메소드에서 확인합니다. toGuardThread가 TRUE이면 execute는 OMGuard 클래스 및 OMGuard 클래스 매크로를 호출합니다.