我正在寻找一种在 iOS 上获得绝对的、始终递增的系统正常运行时间的方法。
它应该返回自设备上次重启以来的时间,并且不受系统日期更改的影响。
我能找到的所有方法要么在设备休眠时暂停(CACurrentMediaTime
、[NSProcessInfo systemUptime]
、mach_absolute_time
),要么被更改当系统日期更改时 (sysctl/KERN_BOOTTIME
)。
有什么想法吗?
最佳答案
我想我已经解决了。
time()
在设备休眠时继续递增,但当然可以由操作系统或用户操作。但是,内核启动时间(系统上次启动时间的时间戳)也会在系统时钟更改时更改,因此即使这两个值不固定,它们之间的偏移量也是固定的。
#include <sys/sysctl.h>
- (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;
}
关于ios - 获取 iOS 系统正常运行时间, sleep 时不会暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12488481/