我TickCount()
用来确定事件之间的时间差或运行某段代码所需的时间。但它在 OS X 10.8中已被弃用。因此,我需要一个替代方案。
2 回答
如果要测量绝对时间,请使用
gettimeofday()
. 这会为您提供日期,例如“Thu Nov 22 07:48:52 UTC 2012”。这并不总是适合测量事件之间的差异,因为gettimeofday()
如果用户更改时钟,则报告的时间可能会向前或向后跳跃。如果要测量相对时间,
mach_absolute_time()
. 这使您可以测量两个事件之间的差异,例如“15.410 s”。这不会给出绝对时间,但总是单调的。如果要测量 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
通过更改mach_absolute_time
.