Pot*_*ter 9 macos time objective-c uptime ios
是否有API来获取NSDate或NSTimeInterval表示系统启动的时间?某些API(如[NSProcessInfo systemUptime]Core和Core Motion)自启动后返回时间.我需要将这些正常运行时间值与NSDates 精确地关联到大约一毫秒.
自启动以来的时间表面上提供了更高的精度,但很容易看出NSDate已经提供了大约100纳秒的精度,并且微秒以下的任何东西只是测量中断延迟和PCB时钟抖动.
显而易见的是从当前时间中减去正常运行时间[NSDate date].但是假设两个系统调用之间的时间没有变化,这很难实现.此外,如果线程在调用之间被抢占,则一切都被抛弃.解决方法是多次重复该过程并使用最小的结果,但是很糟糕.
NSDate 必须有一个主偏移量,它用于从系统正常运行时间生成具有当前时间的对象,是否真的没有办法获得它?
在OSX中,您可以使用sysctl().这就是OSX Unix实用程序的uptime功能. 源代码可用 - 搜索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];
}
Run Code Online (Sandbox Code Playgroud)
看看这是否有效......
| 归档时间: |
|
| 查看次数: |
6082 次 |
| 最近记录: |