簡體   English   中英

在Mac OS X 10.8中不推薦使用TickCount()

[英]TickCount() deprecated in Mac OS X 10.8

我正在使用TickCount()確定事件之間的時間差或運行特定代碼所需的時間。 但是在OS X 10.8中已棄用 因此,我需要一個替代方案。

  1. 如果要測量絕對時間,請使用gettimeofday() 這為您提供了日期,例如“ UTC 2012年11月22日星期四07:48:52”。 這並不總是適合於測量事件之間的差異,因為如果用戶更改時鍾,則gettimeofday()報告的時間可以向前或向后跳躍。

  2. 如果要測量相對時間,請使用mach_absolute_time() 這樣就可以測量兩個事件之間的差異,例如“ 15.410 s”。 這沒有給出絕對的時間,但是總是單調的。

  3. 如果要測量CPU時間,請使用clock() 通常(但並非總是)是您測量一段代碼的性能的方式。 它不計算花費在IO上或對系統速度的影響,因此僅當您知道要測量CPU限制時才應使用它。

我很驚訝TickCount()之前沒有被棄用。 這實際上是OS 9和更早的版本。

盡管此API可能不適合新開發,但如果您需要一個相同的API,則可以按以下方式重新實現它:

uint32_t TickCount() {
    uint64_t mat = mach_absolute_time();
    uint32_t mul = 0x80d9594e;
    return ((((0xffffffff & mat) * mul) >> 32) + (mat >> 32) * mul) >> 23;
}

上述實現通過分析創建/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore ,和兌棄用簡要單元測試TickCount通過改變與LLDB由mach_absolute_time返回的mach_absolute_time

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM