gettimeofday函数的选择



我在程序中使用gettimeofday作为时间间隔,如下所示:

struct timeval currentTime, startTime; 
gettimeofday(&startTime, NULL);
startTime.tv_usec /= 1000;
gettimeofday(&currentTime, NULL);
currentTime.tv_usec /= 1000;
long int msSinceStart = (currentTime.tv_usec + (1000 * currentTime.tv_sec) ) - (startTime.tv_usec + (1000 * startTime.tv_sec) );

有其他选择吗?

@user2282782在他们的评论中指出,问题背后的真正问题是警告gettimeofday is invalid in c99在编译时被抛出。

要解决这个问题,正如@Emmanuel指出的,只需添加:
#include <sys/time.h>移到文件的顶部。这也解决了我同样的问题。

您也可以使用CFAbsoluteTimeGetCurrent:

CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();

,并获取已经过的秒数:

CFTimeInterval elapsed = CFAbsoluteTimeGetCurrent() - start;

注意,CFAbsoluteTimeGetCurrent的文档警告我们:

反复调用此函数不能保证结果单调递增。由于与外部时间参考同步或由于用户显式更改时钟,系统时间可能会减少。

这意味着,如果您不幸在发生这些调整之一时测量运行时间,那么最终可能会得到不正确的运行时间计算。这个警告也适用于NSDate和类似的函数。要解决这个问题,您可以使用CACurrentMediaTime:

CFTimeInterval start = CACurrentMediaTime();

CFTimeInterval elapsed = CACurrentMediaTime() - start;

这使用了mach_absolute_time,但避免了在Technical Q&A QA1398中概述的一些复杂性。

Objective-C的备选方案是NSDate。

NSDate *startTime = [NSDate date];
NSTimeInterval secondsSinceStart = -[startTime timeIntervalSinceNow];

当然,如果你想要一个高分辨率的时间,你应该使用mach_absolute_time(参见https://developer.apple.com/library/mac/qa/qa1398/_index.html)。

现在要解决这个问题,您应该在文件中插入以下内容:

#import <UIKit/UIKit.h>

相关内容

  • 没有找到相关文章

最新更新