iOS 启动时间会漂移吗?

2024-01-05

我使用此代码来确定我的 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 与上述代码返回的值。

我不确定,但我想我看到了一些偏差。这对我来说没有任何意义。我不会转换为 NSDate 以防止漂移。我认为启动时间是由内核在启动时记录的,并且不会再次计算,它只是被存储。但是,iOS 是否可以像 NSDate 那样节省启动时间,同时存在任何固有的漂移问题?


虽然 iOS 内核是闭源的,但可以合理地假设它的大部分与 OSX 内核相同,即开源 https://github.com/opensource-apple/xnu.

Within 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);
}

and 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 {} \;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 启动时间会漂移吗? 的相关文章

  • 对 UIImage 进行方形裁剪,导致图像拉伸

    当尝试执行 UIImage 的中心裁剪时 我得到以下结果 左侧是原始图像640 1136 右边是适合正方形的裁剪图像UIImageView at 320 320 turns to 我对比率元素进行了相当多的修改 以便它可以正确检测要修剪的量
  • iOS:从非图像数据生成图像(Godus,如风景)

    所以看到图像后Godus http www kickstarter com projects 22cans project godus我想知道如何生成简单的 非交互式的 2D 图像 with 不同高度或层数的颜色不同就像下面的图片一样 我只
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • iOS 发送 iMessage 尽可能简单

    我希望能够以编程方式发送 iMessage 除了调用一个将文本发送到带有消息的号码的函数之外 无需执行任何其他操作 这两个消息都是文本框 我真的很感激一些示例代码 因为我在网上搜索过 但我发现没有任何帮助 这不适用于商业应用程序 仅适用于我
  • 具有非零“内容”的 QTMovieLayer 的 iOS 替代品?

    背景 QTKit QuickTime Kit 是一个来自 10 3 天的 Mac 框架 在 10 5 中添加了一些层 例如QTMovieLayer QTMovieLayer 的好处之一是您可以使用常规访问电影内容content图层上的属性并
  • Expo 应用程序“您的应用程序正在使用广告标识符 (IDFA)”

    我正在尝试将应用程序上传到应用程序商店 每次我上传二进制文件时 苹果都会坚持认为我的应用程序正在使用广告 而我从未实现过这样的事情 我查看了文档并删除了涉及的所有代码ASIdentifier and adIdentifier我不太确定我错过
  • ObjC <-> Swift 桥接和工厂方法

    我想从 Swift 使用一些 Objective C 类 由于超出了这个问题范围的原因 我的班级init方法被标记为不可用 相反 有一个工厂方法 这是我的班级的简化形式 interface MyClass NSObject instance
  • 是否可以使用 iOS SDK 更改 Amazon Cognito 中的用户名?

    正如标题中所写 是否可以更改 Amazon Cognito 用户的用户名 我在文档中找不到任何内容 可以更新preferred username使用 iOS SDK 的 Cognito 用户 使用updateAttributesAPI 调用
  • 使用原始类型+大小写参数的 Swift Enum 的解决方法?

    我想创建 SKSpriteNodesWallType 请参阅下面的代码 并且仅当WallType is Corner通过它Side其方向的价值 枚举具有原始值 因为我需要将它们作为数字从 plist 加载 并能够随机创建它们 enum Si
  • Xcode UI 测试 - 通过 id 在 Webview 中查找元素

    我们的应用程序是混合的 包含 webview 我正在尝试使用 Xcode UI 测试自动化我们的应用程序 我能够使用以下方法找到网络按钮 let app XCUIApplication app launch let button app s
  • Firebase Messaging FCM 在可配置的时间间隔内分发

    当您使用 FCM 向给定应用程序的所有设备发送推送时 这可能会导致许多用户同时打开他们的应用程序 从而导致大量服务器轮询 从而导致负载峰值 有没有一种方便的方法可以在给定的时间间隔内分发消息以进行计划推送 最后 我们找到了一种可能的方法 通
  • ios - 使用 SIGPIPE 和 SIG_IGN 的信号函数

    我加入了一个旧项目 我发现了这条线 BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOptions si
  • Flutter - 删除 ListView 中项目之间的空间

    我正在使用 ListView builder 函数来创建项目列表 然而 iOS 中每个项目之间的空间很大 截图 你知道如何删除项目吗 看来是默认的 因为我没有添加它 code 列表显示 return Scaffold body ListVi
  • 使用排序函数按 NSDates 对数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为的模型类Event import Foundation import MapKit public class Event let id Int var title String let status
  • Parse 在哪里存储用户会话

    登录代码 PFUser logInWithUsernameInBackground self userTextField text password self passwordTextField text block PFUser user
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效

随机推荐

  • 查看单个文件时,Xcode 快速帮助显示“无快速帮助”

    当我打开 Xcode 项目时 快速帮助功能工作得很好 但是当打开文件时 例如abc swift 不在打开的项目中 则不会出现文档 这是一个例子 安装该版本Command Line Tools为你的 Xcode Xcode menu gt O
  • 尝试序列化实体框架对象时出现 XML 序列化错误

    我有通过实体框架获取的实体 我使用的是 Code First 所以它们是 POCO 当我尝试使用 XmlSerializer 对它们进行 XML 序列化时 出现以下错误 方式 System Data Entity DynamicProxie
  • MySql select IN 子句字符串逗号分隔

    我需要按以下方式执行选择查询 select from my table where id NOT IN comma delimited string 实现这一目标的正确方法是什么 考虑到我控制发送字符串的客户端代码 是否有更好的方法 该字符
  • 根据R中的另一列删除重复日期

    我有一个时间序列 其中包含几个小时的多个条目 date wd ws temp sol octa pg mh daterep 1 2007 01 01 00 00 00 100 1 5 9 0 0 8 D 100 FALSE 2 2007 0
  • Magento:何时将变量传递给块,何时不传递?

    我最近发现使用分配方法在 toHtml 方法中将变量设置到块的强大功能 我的问题是 什么时候适合这样做 什么时候不适合 我正在创建一个新模块 在我看来 将所有变量分配给块并在视图文件中引用这些变量而不是设置类似的东西是非常好的 div di
  • 使用 Anaconda 安装 Pygame

    我正在尝试在 Mac 上安装 pygame 并遇到大量错误 我不能百分百确定这告诉了我什么 但它告诉了我很多 是不是说Pygame只兼容Python 3 5 因为 StackOverflow 上还有另一张票 在 Mac 上使用 anacon
  • 使用 gtag.js 获取客户端 ID

    谷歌发布gtag js https developers google com analytics devguides collection gtagjs 几个月前 作为 Google Analytics 跟踪的新方式 据我了解 最终取代了
  • Perl方法调用可以被拦截吗?

    你能在 Perl 中拦截一个方法调用 对参数做一些事情 然后执行它吗 是的 您可以拦截 Perl 子例程调用 我有一整章关于这类事情掌握 Perl http www masteringperl org 查看钩子 LexWrap http s
  • 如何将map转换为Spark的RDD

    我有一个数据集 它是一些嵌套映射的形式 它的 Scala 类型是 Map String LabelType Map Int Double 首先Stringkey 是每个样本的唯一标识符 value 是一个包含标签 为 1 或 1 的元组 以
  • Haxl 和 Stitch 中的并发数据访问

    这是我之前的后续question https stackoverflow com questions 27591599 are futures in scala really functional 据我了解Haxl http www cs
  • 如何将 Pillow EPS 调整为 JPG 质量

    我正在尝试使用 Pillow 将 EPS 图像转换为 JPEG 但结果质量较低 我正在尝试使用resize方法 但它被完全忽略了 我将 JPEG 图像的大小设置为 3600 4700 但结果图像有 360 470 尺寸 我的代码是 eps
  • Rails 对现有的 ActiveRecord 结果数组进行分页

    我通常在应用程序中使用 will paginate 进行分页 但我的搜索功能遇到了问题 我正在使用 Thinking Sphinx 进行全文搜索 它返回分页的结果 我遇到的问题是 在收到 Thinking Sphinx 的结果后 我需要将它
  • 使用带有子进程、Pipe、Popen 的 python 从 hdfs 读取/写入文件会出现错误

    我正在尝试在 python 脚本内读取 打开 和写入 hdfs 中的文件 但有错误 有人可以告诉我这里出了什么问题吗 代码 完整 sample py usr bin python from subprocess import Popen P
  • 我可以让堆太大吗?

    我明白 一个更大的堆意味着更长的 GC 暂停时间 https stackoverflow com questions 1651225 how to choose the jvm heap size 我对此表示同意 我的代码正在分析一些数据
  • 在c中将128分配给char变量

    输出是 128 的 32 位 2 的补码 即 4294967168 怎么样 include
  • 在 Spark Web UI 中无法看到已完成的作业

    我在用 bin spark submit运行我的 Spark 作业 它运行良好 但打开 Spark Web UI 我在已完成列表中看不到作业 bin spark submit name myapp master local conf spa
  • PyParsing 前瞻和贪婪表达式

    我正在使用 PyParsing 为查询语言编写解析器 并且我陷入了 我认为是 前瞻问题 查询中的一种子句类型旨在将字符串拆分为 3 个部分 字段名 运算符 值 其中字段名是一个单词 运算符是一个或多个单词 值是一个单词 带引号的字符串或带括
  • Xcode 8 故事板错误

    任何人都可以帮助我 我出了问题 我看不到我的故事板视图 子视图 图像视图 全部变成白色 并且显示错误 就像故事板文件一样 发生内部错误 编辑功能可能受到限制 我已经在 xcode 8 和 8 1 beta 最新 xcode 中打开我的项目
  • CSS/DOM 中是什么阻止了带有 display: block 的输入框扩展到其容器的大小

    HTML CSS 示例 div class container div
  • iOS 启动时间会漂移吗?

    我使用此代码来确定我的 iOS 设备上次重新启动的时间 int mib MIB SIZE size t size struct timeval boottime mib 0 CTL KERN mib 1 KERN BOOTTIME size