是否有 API 可以获取表示系统启动时间的 NSDate
或 NSTimeInterval
? [NSProcessInfo systemUptime]
和 Core Motion 等一些 API 会返回启动后的时间。我需要将这些正常运行时间值与 NSDate
精确关联到大约一毫秒。
自启动以来的时间表面上提供了更高的精度,但很容易看出 NSDate
已经提供了 100 纳秒数量级的精度,而低于一微秒的任何东西都只是测量中断延迟和 PCB 时钟抖动。
显而易见的事情是从当前时间中减去正常运行时间 [NSDate date]
。但这假设时间在两个系统调用之间没有变化,这是很难实现的。此外,如果线程在两次调用之间被抢占,则一切都会被抛出。解决方法是多次重复该过程并使用最小的结果,但是糟糕。
NSDate
必须有一个主偏移量,它用于从系统正常运行时间生成对象的当前时间,真的没有办法获得吗?
最佳答案
在 OSX 中你可以使用 sysctl() . OSX Unix 实用程序 uptime
就是这样做的。 Source code可用 - 搜索 boottime
。
公平警告,在 iOS 中我不知道这是否可行。
更新: 找到了一些代码 :)
#include <sys/types.h>
#include <sys/sysctl.h>
#define MIB_SIZE 2
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)
{
// successful call
NSDate* bootDate = [NSDate dateWithTimeIntervalSince1970:
boottime.tv_sec + boottime.tv_usec / 1.e6];
}
看看这是否有效...
关于objective-c - 在 iOS/OS X 上获取系统启动的精确时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282897/