1

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

4

2 回答 2

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

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

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

我很惊讶它TickCount()之前没有被弃用。这确实是 OS 9 和更早版本的东西。

于 2012-11-22T07:44:50.233 回答
1

虽然此 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通过更改mach_absolute_time.

于 2016-03-12T19:34:22.437 回答