2009-12-12 56 views
8

就像背景一样,我正在Cocoa中构建一个应用程序。此应用程序最初在另一个环境中以C++存在。我希望尽可能在Objective-C中做到这一点。确定可可中的毫秒时间间隔

我的问题是:

1) 如何计算,作为一个整数的毫秒数之间现在和以前的时候,我像现在记住了吗?

2) 当一个Objective-C程序,包括time.h中使用的,什么是

时钟()

谢谢你的帮助的单位。

回答

14

您可以使用CFAbsoluteTimeGetCurrent(),但请记住时钟可能会在两个通话之间发生变化,并且可能会使您紧张。如果你想防范,你应该使用CACurrentMediaTime()

这些返回类型分别是CFAbsoluteTimeCFTimeInterval,默认情况下都是double。所以他们返回精度为double的秒数。如果你真的想要一个整数,你可以使用mach_absolute_time()找到#include <mach/mach_time.h>它返回一个64位整数。这需要一些单位转换,因此请查看this link的示例代码。这是CACurrentMediaTime()在内部使用的,所以最好坚持这一点。

计算两个调用之间的差异显然只是一个减法,使用一个变量来记住最后一个值。

对于clock函数,请参阅此处的文档:clock()。基本上你需要将返回值除以CLOCKS_PER_SEC以获得实际时间。

+0

“clock”的Non-C++特定文档链接:http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/clock.3.html – 2009-12-12 16:15:30

6

作为一个整数,我该如何计算从现在起和前一次记住的毫秒数?

是否有任何理由需要它作为整数毫秒?询问NSDate的时间间隔,因为另一个日期会给你一个浮点数秒。如果你真的需要毫秒,你可以简单地乘以1000得到一个毫秒的浮点数。如果您确实需要整数,则可以舍入或截断浮点值。

如果您想与整数做到这一点从开始到结束,使用UpTimemach_absolute_time获得绝对单位的当前时间,然后使用AbsoluteToNanoseconds将其转换成一个真实世界的单位。显然,你必须将它除以1,000,000来获得毫秒。

QA1398表明mach_absolute_time,但UpTime是容易的,因为它返回相同类型AbsoluteToNanoseconds用途(没有“指针乐趣”如技术说明示出)。

AbsoluteToNanoseconds返回一个UnsignedWide,这是一个结构。 (这个东西可以追溯到Mac机器可以处理标量64位值之前。)使用UnsignedWideToUInt64函数将其转换为标量。这只是离开减法,你会以正常的方式进行。