我在程序中使用gettimeofday作为时间间隔,如下所示:
struct timeval currentTime, startTime;
gettimeofday(&startTime, NULL);
startTime.tv_usec /= 1000;
gettimeofday(¤tTime, NULL);
currentTime.tv_usec /= 1000;
long int msSinceStart = (currentTime.tv_usec + (1000 * currentTime.tv_sec) ) - (startTime.tv_usec + (1000 * startTime.tv_sec) );有什么替代方案吗?
发布于 2015-12-16 03:37:01
@user2282782在他们的评论中指出,这个问题背后的真正问题是在编译时抛出了警告gettimeofday is invalid in c99。
@Emmanuel指出,要解决这个问题,只需添加:
将#include <sys/time.h>添加到文件的顶部。这也解决了我同样的问题。
发布于 2014-03-20 20:42:38
Objective-C的替代方案是NSDate。
NSDate *startTime = [NSDate date];
NSTimeInterval secondsSinceStart = -[startTime timeIntervalSinceNow];当然,如果你想要高分辨率,你应该使用mach_absolute_time (参见https://developer.apple.com/library/mac/qa/qa1398/_index.html)。
发布于 2014-03-20 20:48:36
您也可以使用CFAbsoluteTimeGetCurrent
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();并获取所经过的秒数:
CFTimeInterval elapsed = CFAbsoluteTimeGetCurrent() - start;注意,CFAbsoluteTimeGetCurrent的documentation警告我们:
对此函数的重复调用不能保证单调递增的结果。由于与外部时间基准同步或由于显式用户改变时钟,系统时间可能会减少。
这意味着,当这些调整之一发生时,如果您不幸测量了运行时间,您可能会得到错误的运行时间计算。此警告也适用于NSDate和类似的函数。要解决此问题,您可以使用CACurrentMediaTime
CFTimeInterval start = CACurrentMediaTime();和
CFTimeInterval elapsed = CACurrentMediaTime() - start;这使用了mach_absolute_time,但避免了Technical Q&A QA1398中描述的一些复杂性。
https://stackoverflow.com/questions/22533076
复制相似问题