Symbian裏面,比較常用的定時器是 CPeriodic,其實也就是由 CTimer 實現的,而CTimer 則是一個 活動對象(Active Object)。
通過查看源代碼發現,活動對象所被調用的最小時間片是取自 User::TickCount()。
在SDK中,User::TickCount()的註釋如下:
static IMPORT_C TUint TickCount();
Description
Gets the current tick count.
The period between ticks is usually 1/64 second, but may be hardware dependent.
Return value
也就是說,每次活動對象最小的時間間隔將會是 1/64 秒。
我嘗試過將CPeriodic的時間間隔分別設 1000000/33 和 1000000/31 微秒,而通過計算其時間間隔,可以發現兩者足足有1倍的差別。
這個最小時間片也限制了 CTimer的精度,它的間隔只能是 1/64 秒的 倍數。
這就意味着,活動對象並不適合於短時間執行的任務。
一個比較好的例子就是 CImageDecoder 。
它使用活動對象來進行異步解碼,但是當圖片很小的時候,解碼時間不足1/64秒,那麼時間就被白白浪費了。
同步解碼是一個不錯的選擇。