2012-04-24 62 views
0

我正在嘗試找到一種關於在ios中測量時間的可靠解決方案。 我想以1秒的精度顯示時間的流逝。完全像在ios中建立的秒錶,但只有秒。 到目前爲止,我找到的每個解決方案都顯得笨拙,因爲它要麼使用NStimer 或者某些C級愛好者的幫助進行輪詢。 我的問題是,「我」每次都需要詢問系統,現在是什麼時間。但是如果我應該依賴於非確定性的NStimer,那麼我的測量就非常不可靠。 沒有從系統調用的更新我的時間的委託方法? 我想如果我將輪詢的分辨率提高到1納秒,那就沒問題。但我應該如何使用低級別的C來實現它?在ios中獲取實時時鐘

+0

'NSTimer'是做這件事的傳統方式,它在1秒的分辨率下工作得很好。除了猜測之外,你有什麼理由不使用它嗎?如果您演示了您遇到的特定問題,這將有所幫助。另外,如果您真的在尋找基於C的解決方案,請重新標記您的問題。 – 2012-04-24 22:07:48

+0

對我來說這樣做沒有任何意義。我管理它的推測,但兩次思考沒有錯。 如果我將NStimer設置爲1秒的分辨率來詢問實際時間,它實際上會在1秒的時間間隔內振盪。有時它會在0.9984秒內提問,有時在1.0055秒內..我會得到的結果必須四捨五入到最接近的一秒。對這項工作的轉變結果是=>每秒鐘會持續不同的時間。我親眼看不到,節奏不是恆定的嗎? – 2012-04-24 22:15:04

+0

你認爲你的大腦有多大能區分幾十毫秒的差異?不太好,我向你保證。我已經使用'NSTimer'實現了圖形化定時器,它工作得很好。 – 2012-04-24 22:16:50

回答

1

我不確定你的目標是什麼。我無法弄清楚你是否想要一個查詢高分辨率時間的好方法,或者如果你想讓系統給你回電話。

如果前者,這是我用於高分辨率定時器。

#import "mach/mach_time.h" 

#define TICKS_TO_NANOS(_ticks_, _timebase_) (((_ticks_) * ((_timebase_).numer))/((_timebase_).denom)) 
#define NOW_IN_TICKS() (mach_absolute_time()) 
#define NOW_IN_NANOS(_timebase_) TICKS_TO_NANOS(NOW_IN_TICKS(), _timebase_) 

如果是後者,那麼你就可以從未得到保證的回調計時器。可能最爲一致的定時器回調函數是掛入CADisplayLink,但如果圖形方法耗時過長,則可能無法保持一致。

你可以嘗試系統計時器,但你也不會得到太多的保證。

1

iOS設備只會每秒刷新顯示60次(最大),因此任何時間的準確度都將超出此範圍,這對用戶是不可見的。您可以使用CADisplayLink以每秒60次的方式呼叫您,並忽略(返回)59個呼叫。但是你仍然需要輪詢其中一個時鐘(有多個時鐘)來檢查顯示速率和時鐘之間的漂移。如果你的代碼在UI運行循環中做了太長時間的事情,你可能會錯過一個框架,所以你也必須檢查它。