我在我的程序中使用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) );
有没有替代方案?
答案 0 :(得分:2)
@ user2282782在评论中注意到问题背后的真正问题是警告gettimeofday is invalid in c99
在编译时被抛出。
要解决这个问题,正如@Emmanuel指出的那样,只需添加:
#include <sys/time.h>
到文件的顶部。这也解决了我同样的问题。
答案 1 :(得分:1)
Objective-C替代方案是NSDate。
NSDate *startTime = [NSDate date];
NSTimeInterval secondsSinceStart = -[startTime timeIntervalSinceNow];
当然,如果你想要一个高分辨率时间,你应该使用mach_absolute_time(见https://developer.apple.com/library/mac/qa/qa1398/_index.html)。
答案 2 :(得分:1)
您还可以使用CFAbsoluteTimeGetCurrent
:
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
并获得已经过的秒数:
CFTimeInterval elapsed = CFAbsoluteTimeGetCurrent() - start;
注意,CFAbsoluteTimeGetCurrent
的{{3}}警告我们:
重复调用此函数并不能保证单调增加结果。由于与外部时间参考同步或由于时钟的明确用户更改,系统时间可能会减少。
这意味着,如果您不幸测量其中一次调整所经过的时间,则最终可能会计算出错误的经过时间。此警告也适用于NSDate
和类似功能。要解决此问题,您可以使用documentation:
CFTimeInterval start = CACurrentMediaTime();
和
CFTimeInterval elapsed = CACurrentMediaTime() - start;
这使用了mach_absolute_time
,但避免了CACurrentMediaTime
中列出的一些复杂性。
答案 3 :(得分:0)
现在要解决此问题,您应该在文件中插入以下内容:
#import <UIKit/UIKit.h>