我需要测量经过的时间,以便知道何时超过了一段时间。
我过去常常使用Ticks()
和Microseconds()
,但这两个函数现已弃用。
CFAbsoluteTimeGetCurrent
不是正确的使用方式,因为它可能会向后运行,如文档中所述:
重复调用此函数并不能保证单调 增加结果。系统时间可能因此而减少 与外部时间参考同步或由于显式 用户改变时钟。
还有什么不被弃用且相当适合未来的?
答案 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可以容纳几分之一秒(例如十分之一,百分之一,千分之一等)。