6

我需要从上次设备启动中获取 NSTimeInterval 值。我发现 CACurrentMediaTime() 适合这项任务,但在我的应用程序中我没有使用核心动画,我认为这不是包含这个框架只是为了获得这个功能的最佳方式。有没有另一种方法可以更优雅地从上次启动以秒为单位获取时间?

4

3 回答 3

19

自上次系统重启以来的NSTimeInterval值可以通过以下 Foundation 对象和方法更直接地获取:

[[NSProcessInfo processInfo] systemUptime]

于 2013-07-16T04:34:02.283 回答
1

最快的低级方法是使用 mach_absolute_time() 从处理器读取系统正常运行时间

#include <mach/mach_time.h>

int systemUptime()
{
    static float timebase_ratio;

    if (timebase_ratio == 0) {
       mach_timebase_info_data_t s_timebase_info;
       (void) mach_timebase_info(&s_timebase_info);

       timebase_ratio = (float)s_timebase_info.numer / s_timebase_info.denom;
    }

    return (int)(timebase_ratio * mach_absolute_time() / 1000000000);
}

请注意,处理器的 timebase_ratio 是不同的。例如,在 macbook 上它等于 1,而在 iPhone 5 上它等于 125/3 (~40)。

于 2013-12-13T12:59:53.077 回答
-1

尝试 C 系统调用,times(3) 应该返回正常运行时间。

在 MacOSX 上,正常运行时间也返回此类。所以也必须有一种方法。

于 2011-05-09T13:52:08.473 回答