就像背景一样,我正在用Cocoa构建一个应用程序。此应用程序最初在C ++中存在于另一个环境中。我想在Objective-C中尽可能多地做。
我的问题是:
1) 作为一个整数,我如何计算现在和之前我记得的时间之间的毫秒数?
2) 当在Objective-C程序中使用时,包括time.h,
的单位是什么时钟()
感谢您的帮助。
答案 0 :(得分:14)
您可以使用CFAbsoluteTimeGetCurrent()
但请注意,时钟可以在两次通话之间切换,并且可能会让您失意。如果您想要防范,请使用CACurrentMediaTime()
。
这些的返回类型分别为CFAbsoluteTime
和CFTimeInterval
,默认情况下均为double
。因此,它们以double
精度返回秒数。如果确实想要一个整数,您可以使用mach_absolute_time()
中的#include <mach/mach_time.h>
返回64位整数。这需要一些单位转换,因此请查看this link示例代码。这是CACurrentMediaTime()
内部使用的内容,因此最好坚持使用它。
计算两个调用之间的差异显然只是一个减法,使用变量来记住最后一个值。
对于clock
函数,请参阅此处的文档:clock()。基本上,您需要将返回值除以CLOCKS_PER_SEC
以获得实际时间。
答案 1 :(得分:6)
如何以整数计算现在和我之前记得的上一次之间的毫秒数?
你有什么理由需要它作为整数毫秒?询问NSDate的时间间隔,因为另一个日期将给你一个浮点数秒。如果你确实需要毫秒,你可以简单地乘以1000来得到一个浮点数毫秒。如果确实需要整数,则可以舍入或截断浮点值。
如果您想从头到尾使用整数,请使用UpTime
或mach_absolute_time
以绝对单位获取当前时间,然后使用AbsoluteToNanoseconds
转换为到现实世界的单位。显然,你必须将它除以1,000,000才能达到毫秒。
QA1398建议mach_absolute_time
,但UpTime
更容易,因为它返回相同类型AbsoluteToNanoseconds
使用(没有“指针乐趣”,如技术说明中所示)。 / p>
AbsoluteToNanoseconds
会返回UnsignedWide
,这是一个结构。 (这些东西可追溯到Mac机器可以处理标量64位值之前。)使用UnsignedWideToUInt64
函数将其转换为标量。这只是离开减法,你将以正常的方式做。