首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >objective-c gettimeofday函数备选方案

objective-c gettimeofday函数备选方案
EN

Stack Overflow用户
提问于 2014-03-20 20:29:32
回答 4查看 2.9K关注 0票数 1

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

代码语言:javascript
复制
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) );

有什么替代方案吗?

EN

回答 4

Stack Overflow用户

发布于 2015-12-16 03:37:01

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

@Emmanuel指出,要解决这个问题,只需添加:

#include <sys/time.h>添加到文件的顶部。这也解决了我同样的问题。

票数 3
EN

Stack Overflow用户

发布于 2014-03-20 20:42:38

Objective-C的替代方案是NSDate。

代码语言:javascript
复制
NSDate *startTime = [NSDate date];
NSTimeInterval secondsSinceStart = -[startTime timeIntervalSinceNow];

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

票数 1
EN

Stack Overflow用户

发布于 2014-03-20 20:48:36

您也可以使用CFAbsoluteTimeGetCurrent

代码语言:javascript
复制
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();

并获取所经过的秒数:

代码语言:javascript
复制
CFTimeInterval elapsed = CFAbsoluteTimeGetCurrent() - start;

注意,CFAbsoluteTimeGetCurrentdocumentation警告我们:

对此函数的重复调用不能保证单调递增的结果。由于与外部时间基准同步或由于显式用户改变时钟,系统时间可能会减少。

这意味着,当这些调整之一发生时,如果您不幸测量了运行时间,您可能会得到错误的运行时间计算。此警告也适用于NSDate和类似的函数。要解决此问题,您可以使用CACurrentMediaTime

代码语言:javascript
复制
CFTimeInterval start = CACurrentMediaTime();

代码语言:javascript
复制
CFTimeInterval elapsed = CACurrentMediaTime() - start;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22533076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档