测量OS X中的经过时间

时间:2015-05-12 19:02:54

标签: macos cocoa core-foundation mach

我需要测量经过的时间,以便知道何时超过了一段时间。

我过去常常使用Ticks()Microseconds(),但这两个函数现已弃用。

CFAbsoluteTimeGetCurrent不是正确的使用方式,因为它可能会向后运行,如文档中所述:

  

重复调用此函数并不能保证单调   增加结果。系统时间可能因此而减少   与外部时间参考同步或由于显式   用户改变时钟。

还有什么不被弃用且相当适合未来的?

2 个答案:

答案 0 :(得分:2)

正如Q&A 1398中所述,一种方法是使用mach_absolute_time,如下所示:

    static mach_timebase_info_data_t sTimebaseInfo;
    mach_timebase_info(&sTimebaseInfo); // Determines the time scale

    uint64_t t1 = mach_absolute_time();
    ...
    uint64_t t2 = mach_absolute_time();
    uint64_t elapsedNano = (t2-t1) * sTimebaseInfo.numer / sTimebaseInfo.denom;
但是,这可能也不是万无一失的。在某些情况下,值可能会溢出,如this answer中所述。

答案 1 :(得分:0)

使用- (void)loop { NSDate *startTime = [NSDate date]; sleep(90); // sleep for 90 seconds [self elapsedTime:startTime]; } - (void)elapsedTime:(NSDate *)startTime { NSTimeInterval elapsedTime = fabs([startTime timeIntervalSinceNow]); int intSeconds = (int) elapsedTime; int intMinutes = intSeconds / 60; intSeconds = intSeconds % 60; NSLog(@"Elapsed Time: %d minute(s) %d seconds", intMinutes, intSeconds); }

  

用于指定时间间隔,以秒为单位。

示例:

Elapsed Time: 1 minute(s) 29 seconds

<强>结果:

./jmeter.sh -n -t testplan.jmx -l log.jtl

目前还不清楚您正在寻找什么类型的精度,尽管NSTimeInterval可以容纳几分之一秒(例如十分之一,百分之一,千分之一等)。