voromax
voromax

Reputation: 3389

How to get NSTimeInterval value from last boot

I need to get NSTimeInterval value from last device boot. I found CACurrentMediaTime() which suits this task, but in my app I am not using Core Animation and I don't think that this is the best way to include this framework just to get this function. Is there another way to get time in seconds from last boot more elegant way?

Upvotes: 6

Views: 4750

Answers (3)

uchuugaka
uchuugaka

Reputation: 12782

The NSTimeInterval value since the last system restart can be acquired more directly via the following Foundation object and method:

[[NSProcessInfo processInfo] systemUptime]

Upvotes: 20

malex
malex

Reputation: 10096

The fastest low-level method is to read system uptime from processor using 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);
}

Note that timebase_ratio is different for processors. For example, on macbook it equals 1 whereas on iPhone 5 it equals 125/3 (~40).

Upvotes: 1

David Neiss
David Neiss

Reputation: 8237

Try a C system call, times(3) is supposed to return uptime.

On MacOSX, uptime also returns such. So there has to be a way though that as well.

Upvotes: -1

Related Questions