ios - 获取 iOS 系统正常运行时间, sleep 时不会暂停

标签 ios kernel clock uptime

我正在寻找一种在 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/

相关文章:

php - 将 Javascript 时钟与服务器时钟同步

c++ - 尝试在 C++ 应用程序中更改 Ubuntu 14.04 中的实时时钟,得到 "Operation not permitted"

ios - 地幔 MTLModel 的 copyWithZone : deep copy?

ios - 打开 GL : convert pan size in screen to world size

ios - 我在哪里可以将.p12文件或“推送”通知 key 上传到Parse Server?

python - 内核 GridSearchCV 参数

ios - 如何在 Swift 中将一个属性分配给多个变量?

x86 - 从 GRUB2 多重引导信息结构中获取总可用 RAM

c - 来自内核模块中函数的 EFAULT

python - 格式化数字时钟的时间