2016-12-15 35 views
1

我使用DispatchTime.now()來測量事件之間的已用時間。有時它可以正常工作,但偶爾它會產生遠低於我預期的值。Swift 3.0中不準確的DispatchTime.now()

我的當前使用情況:

var t = DispatchTime.now() 
var pt = DispatchTime.now() 

// called when an event happens 
t = DispatchTime.now() 
var elapsed = Double(t.uptimeNanoseconds - pt.uptimeNanoseconds) 
elapsed *= 32768/1000000000 
pt = t 

使得噸和Pt當前和以前的時間,經過的發生在納秒的差,轉換爲加倍和體重秤如1秒= 32768。當這種技術無法記錄的數據比預期的小約100倍。縮放不是問題,我已經檢查了t和pt的rawValue。我的假設是,運行DispatchTime的時鐘運行速度較慢,可能是因爲調試,但總的來說,我認爲iOS會補償這樣的事情。

+1

DispatchTime是爲...調度。它受到各種與牆(「常規」)時間的偏差的影響,例如由OS完成的定時器合併。 – Alexander

+0

謝謝亞歷山大。你能指定你的意思嗎?我看到有人使用DispatchTime的例子,它看起來很乾淨,但我認爲這不是最好的選擇。你有建議測量真實時間? – jonwooding

+1

Grand Central Dispatch是Swift的多線程框架。除了指定'Dispatch'作業的時間以外,使用'DispatchTime'完全不合適,並且會導致這樣的結果。我的解決方案取決於我想要做什麼,我想要的精度類型,我願意爲它支付的性能數量等。 – Alexander

回答

0

由於@AlexanderMomchliov建議NSDate比DispatchTime更好。

實現爲:

var t: TimeInterval = 0 
var pt: TimeInterval = NSDate().timeIntervalSinceReferenceDate 

// called when an event happens 
t = NSDate().timeIntervalSinceReferenceDate 
var elapsed: Double = t - pt 
elapsed *= 32768 
pt = t