symbian開發中的時間使用

http://blog.oasisfeng.com/2006/10/07/timer-in-symbian-development/

11:01 AM | DevelopmentSymbianTimer
2006.10

(1)TTime::HomeTime() / TTime::UniversalTime()

  最常見的時間獲取手段,精度不高;因涉及一定的運算過程,效率較低。適用於需要以常規“年月日時分秒”方式使用時間的場合。在EKA2平臺下,其精度與低階系統時鐘(Nanokernel Timer)一致,通常爲微妙級別。通過 HAL::Get(HAL::ENanoTickPeriod, result) 可以獲的具體精度。
  注意:它們使用的是系統時間,這是可以被其它進程修改的。

(2)User::TickCount()

  傳統的Tick計數器,精度通常僅爲1/64秒(可能隨硬件有差異),適用於精度要求較低的場合。通過 HAL::Get(HAL::ESystemTickPeriod, result) 可以獲得具體精度。
  注意:在休眠(Standby)狀態下,TickCount將停止計數,所以User::TickCount()在休眠狀態下將“損失”計時!

(3)User::NTickCount()

  低階系統時鐘(Nanokernel Timer),通常提供微妙級Tick。通過 HAL::Get(HAL::ENanoTickPeriod, result) 可以獲得具體精度。
  注意:Symbian OS 6.x 沒有此API。與TickCount不同的是,User::NTickCount()在休眠狀態下不“損失”計時。

(4)User::FastCounter()

  返回值類似於Tick,提供Symbian OS所能支持的最高精度,通常比TTime::HomeTime()更準確。(如果硬件不支持high resolution timer,則毫秒級時鐘替代)而且,因爲它採用快速的exec call讀取一個硬件寄存器的數值,效率很高。通過 HAL::Get(HALData::EFastCounterFrequency, result) 可以獲得其具體精度。
  注意:在每次終端從休眠狀態激活後,它將同步至正確的數值,也就是說User::FastCounter()在休眠狀態下其實也是不“損失”計時的。

  另外,User::After(), CPeriodic也會在休眠狀態下“損失”計時,所以在手機這種特殊的應用環境中,需要特別注意不同定時器在“休眠”狀態下計時的差異。 

轉者附加:

(2)中提到的方法如下

        TInt period;
        User::LeaveIfError(HAL::Get(HALData::ESystemTickPeriod, period));
        TInt logMillisecsPerTick = period / 1000;
        TBuf<50> text;

        TInt timeInMillisecs = User::TickCount() * logMillisecsPerTick;
        TInt secs = timeInMillisecs / 1000;
        TInt millisecs = timeInMillisecs % 1000;
        text.Num(secs);
        text.Append('.');
        text.Num(millisecs);// 秒.毫秒 精度通常僅爲1/64秒(可能隨硬件有差異)在模擬器上是1/100秒,

        ShowTextOnScreen(text);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章