OMTimerManager는 단일 타이머 태스크를 사용하여 모든 스레드에 타이머 서비스를 제공합니다. 이 클래스는 헤더 파일인 timer.h에 정의되어 있습니다.
OMTimerManager는 제한시간 요청을 관리하고 시스템 오브젝트에 대한 제한시간 이벤트를 실행합니다. OMTimerManager는 싱글톤 활성 오브젝트입니다. 제한시간 요청을 관리하기 위해 프레임워크 초기화 중 싱글톤이 작성되고 새로운 단일 스레드가 작성됩니다.
OMThreadTimer는 OMTimerManager에서 상속하고 프레임워크 및 애플리케이션에 대한 실제 타이밍 서비스를 수행합니다. OMThreadTimer에 대한 자세한 정보는 OMThreadTimer 클래스의 내용을 참조하십시오.
OMTimerManager는 다음과 같은 두 가지 시간 모델을 구현할 수 있습니다.
시뮬레이션된 시간은 디버깅 및 알고리즘 유효성 검증에 유용합니다.
시뮬레이션된 시간은 런타임 시 지원됩니다. 즉, 매개변수가 애플리케이션 초기화 시 프레임워크에 제공됩니다. 그러나 실시간과 시뮬레이션된 시간 간에 전환하려면 코드를 재생성하여 빌드해야 합니다.
현재 버전에서 시뮬레이션된 시간은 초기화 시 OXF::init에서 isRealTime 매개변수를 통해 처리됩니다.
init, OMTimerManagerDefaults 클래스,goNext(개인용) 및 goNextAndPost 메소드는 시뮬레이션된 시간 모드에서 사용됩니다.
보호된 이 속성은 현시 시스템 시간(m_Time)이 "오버플로우"되었는지 여부를 판별하는 데 사용되는 값을 지정합니다. m_Time은 부호 없는 정수(Long)로 구현되고 최대값은 구현에 따라 달라집니다.
RP_FRAMEWORK_DLL static const timeUnit
overflowMark;
timeUnit 메소드는 다음과 같이 rawtypes.h에 정의되어 있습니다.
typedef unsigned long timeUnit;
overflowMark 값은 다음과 같이 timer.cpp에 지정되어 있습니다.
const timeUnit OMTimerManager::overflowMark =
0x80000000;
post 메소드는 힙에서 현재 제한시간 요청으로 포인터를 가져온 후 m_Time을 overflowMark와 비교합니다. m_Time >= overflowMark이면 post 메소드는 힙에 대해 반복 수행하여 각 제한시간 요청의 dueTime을 조정하고 다음과 같이 m_Time을 재설정합니다.
m_Time &= ~overflowMark;
dueTime과 m_Time을 업데이트하면 시스템 자원을 사용합니다. 따라서 애플리케이션의 m_Time을 주의 깊게 모니터링해야 합니다.