TickCount()在Mac OS X 10.8中已弃用

时间:2012-11-22 07:41:28

标签: macos osx-mountain-lion deprecated

我正在使用TickCount()来确定运行某段代码所需的事件或时间之间的时差。但它在OS X 10.8中是deprecated。 因此,我需要一个替代方案。

2 个答案:

答案 0 :(得分:4)

  1. 如果要测量绝对时间,请使用gettimeofday()。这将为您提供日期,例如“Thu Nov 22 07:48:52 UTC 2012”。这并不总是适合测量事件之间的差异,因为如果用户更改时钟,gettimeofday()报告的时间可以向前或向后跳跃。

  2. 如果您想测量相对时间,mach_absolute_time()。这使您可以测量两个事件之间的差异,例如“15.410秒”。这不会给出绝对时间,但总是单调的。

  3. 如果要测量CPU时间,请使用clock()。这通常是 ,但并不总是衡量一段代码性能的方式。它没有计算在IO上花费的时间,也没有计算对系统速度的影响,因此只有当你知道自己正在测量CPU绑定的东西时才应该使用它。

  4. 我很惊讶TickCount()之前没有被弃用。它真的是OS 9及更早版本。

答案 1 :(得分:2)

虽然此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进行了简单的单元测试。

相关问题