Uptime iOS Цель C – миллисекундная точность

Я пытаюсь получить время работы для iOS. Я использовал mach_absolute_time, но я обнаружил, что он приостановился во время сна.

Я нашел этот фрагмент:

- (time_t)uptime { struct timeval boottime; int mib[2] = {CTL_KERN, KERN_BOOTTIME}; size_t size = sizeof(boottime); time_t now; time_t uptime = -1; (void)time(&now); if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 && boottime.tv_sec != 0) { uptime = now - boottime.tv_sec; } return uptime; } 

Это трюк. НО, он возвращает целые секунды. Любой способ получить миллисекунды из этого?

Благодаря!

Ядро не сохраняет (по-видимому) временную метку с более высоким разрешением времени загрузки.

KERN_BOOTTIME реализуется функцией sysctl_boottime в bsd/kern/kern_sysctl.c . Он вызывает boottime_sec .

boottime_sec реализуется в bsd/kern/kern_time.c . Он вызывает clock_get_boottime_nanotime , у которого есть многообещающее имя.

clock_get_boottime_nanotime реализуется в osfmk/kern/clock.c . Он жестко закодирован, чтобы всегда возвращать 0 в аргументе nanosecs .

Если вы хотите что-то чистое Objective-C, попробуйте

 NSTimeInterval uptime = [[NSProcessInfo processInfo] systemUptime]; 

( NSTimeInterval – это typedef для double , представляющий секунды.)

Я знаю, что, наверное, слишком поздно, но там вы идете:

 + (NSTimeInterval)uptime { struct timeval boottime; int mib[2] = {CTL_KERN, KERN_BOOTTIME}; size_t size = sizeof(boottime); struct timeval now; struct timezone tz; gettimeofday(&now, &tz); double uptime = -1; if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 && boottime.tv_sec != 0) { uptime = now.tv_sec - boottime.tv_sec; uptime += (double)(now.tv_usec - boottime.tv_usec) / 1000000.0; } return uptime; } 
Interesting Posts
Давайте будем гением компьютера.