iOS启动时间会漂移吗?

保罗·塞尚

我正在使用以下代码来确定我的iOS设备上次重启的时间:

int mib[MIB_SIZE];
size_t size;
struct timeval boottime;

mib[0] = CTL_KERN;
mib[1] = KERN_BOOTTIME;
size = sizeof(boottime);
if (sysctl(mib, MIB_SIZE, &boottime, &size, NULL, 0) != -1) {
    return boottime.tv_sec;
}

return 0;

这次我看到一些异常。特别是,我保存了long以及几天和几周后,检查保存的long agains以上代码返回的值。

我不确定,但我想我会看到一些变化。这对我来说没有任何意义。我不会转换为NSDate来防止漂移。我认为启动时间是由内核在启动时记录的,不再进行计算,而是存储起来的。但是,iOS是否可以将启动时间保存为NSDate,从而避免任何固有的漂移问题?

Trojanfoe

虽然iOS内核是开源的,但可以合理地假设大多数与OSX内核相同,后者是开源的

内部osfmk/kern/clock.c有函数:

/*
 *  clock_get_boottime_nanotime:
 *
 *  Return the boottime, used by sysctl.
 */
void
clock_get_boottime_nanotime(
    clock_sec_t         *secs,
    clock_nsec_t        *nanosecs)
{
    spl_t   s;

    s = splclock();
    clock_lock();

    *secs = (clock_sec_t)clock_boottime;
    *nanosecs = 0;

    clock_unlock();
    splx(s);
}

clock_boottime声明为:

static uint64_t     clock_boottime;             /* Seconds boottime epoch */

最后对该函数的注释表明它确实可以更改:

/*
 *  clock_set_calendar_microtime:
 *
 *  Sets the current calendar value by
 *  recalculating the epoch and offset
 *  from the system clock.
 *
 *  Also adjusts the boottime to keep the
 *  value consistent, writes the new
 *  calendar value to the platform clock,
 *  and sends calendar change notifications.
 */
void
clock_set_calendar_microtime(
    clock_sec_t         secs,
    clock_usec_t        microsecs)
{
    ...

更新以回答来自OP的查询

我不确定clock_set_calendar_microtime()调用频率,因为我不熟悉内核的内部工作原理。但是,它会调整clock_boottime值并在clock_bootime中初始化值clock_initialize_calendar(),因此我想可以多次调用它。我一直无法找到使用它的任何呼叫:

$ find . -type f -exec grep -l clock_set_calendar_microtime {} \;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

iOS启动时间会漂移吗?

来自分类Dev

双重启动会影响启动时间吗?

来自分类Dev

iOS应用启动时间测量

来自分类Dev

iOS App启动时间太长

来自分类Dev

为什么“ FileSystemControl”会导致启动时间过长?

来自分类Dev

Ubuntu会检查是否可以在启动时安装吗?

来自分类Dev

减少启动时间

来自分类Dev

减少启动时间

来自分类Dev

您能帮我解决(并纠正)时间漂移问题吗?

来自分类Dev

CudaEvent内核启动时间

来自分类Dev

缓慢的登录启动时间

来自分类Dev

VirtualBox的启动时间很慢

来自分类Dev

如何计算启动时间?

来自分类Dev

如何记录启动时间?

来自分类Dev

好像启动时间很长

来自分类Dev

缓慢的 Ubuntu 启动时间

来自分类Dev

Spring JPA存储库上的API数量是否会影响启动时间?

来自分类Dev

Spring JPA Repository上的API数量是否会影响启动时间?

来自分类Dev

将 ntfs 分区添加到 fstab 会减慢启动时间

来自分类Dev

使用Ubuntu Live USB启动时,Wanna Cry Ransomware会影响我的Windows分区吗?

来自分类Dev

将iOS应用转换为64位会导致应用启动时崩溃

来自分类Dev

当应用启动时,面向iOS的Qt会向上锁定。(qiosscreen.mm断言)

来自分类Dev

tmpfiles.d可以仅基于时间(但不能在启动时)删除文件吗?

来自分类Dev

我可以禁用 udisk2.service 以减少我的 Ubuntu 20.04 上的启动时间吗

来自分类Dev

临时应用程序的加载时间(启动时间)比iPad上由App Store签名的应用程序长吗?

来自分类Dev

无法在启动时间设置重复警报

来自分类Dev

如何衡量JVM的启动时间?

来自分类Dev

如何获得Windows启动时间?

来自分类Dev

如何加快Rails DelayedJobs的启动时间?

Related 相关文章

热门标签

归档