OMTimerManager 會為使用單一計時器作業的所有執行緒,提供計時器服務。 該類別在標頭檔 timer.h 中進行宣告。
OMTimerManager 會管理逾時要求,並將逾時事件發出給系統物件。 OMTimerManager 是單態作用中物件。 在架構起始設定期間,會建立單態,且會建立單一新執行緒,以管理逾時要求。
OMThreadTimer 繼承自 OMTimerManager,並執行架構及應用程式的實際計時服務。 如需 OMThreadTimer 的相關資訊,請參閱OMThreadTimer 類別。
OMTimerManager 可以實作兩個時間模型:
模擬時間對除錯及演算法驗證非常有用。
模擬時間支援處於執行時期(將參數提供給應用程式起始設定中的架構)。 不過,若要在即時與模擬時間之間切換,您需要重新產生並建置程式碼。
在現行版本中,會在起始設定時,透過 OXF::init 中 isRealTime 參數,處理模擬時間。
下列方法會與模擬時間模式搭配使用:init、OMTimerManagerDefaults 類別、goNext(專用)及 goNextAndPost。
overflowMark
此受保護的屬性指定用於判定現行系統時間 (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。