获得应用程序运行时间近似值的最简单方法是在应用程序委托方法调用时存储 NSDateapplicationDidFinishLaunching:
每当您需要进程运行时间时,都会调用并从当前时间中减去该日期。
static NSTimeInterval startTime;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
startTime = [NSDate timeIntervalSinceReferenceDate];
}
- (IBAction)printRunningTime:(id)sender
{
NSLog(@"Approximate running interval:%f", [NSDate timeIntervalSinceReferenceDate] - startTime);
}
如果您需要更准确的 PID 运行间隔,您可以使用sysctl
.
这将为您提供操作系统认为您的进程以 UNIX 时间“运行”的时间点的准确时间戳。 (如果您想要本地时区的时间戳,您可以使用NSDateFormatter
如下)。
#include <sys/sysctl.h>
#include <sys/types.h>
- (IBAction)printRunningTime:(id)sender
{
pid_t pid = [[NSProcessInfo processInfo] processIdentifier];
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid };
struct kinfo_proc proc;
size_t size = sizeof(proc);
sysctl(mib, 4, &proc, &size, NULL, 0);
NSDate* startTime = [NSDate dateWithTimeIntervalSince1970:proc.kp_proc.p_starttime.tv_sec];
NSLog(@"Process start time for PID:%d in UNIX time %@", pid, startTime);
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
[dateFormatter setLocale:[NSLocale currentLocale]];
NSLog(@"Process start time for PID:%d in local time %@", pid, [dateFormatter stringFromDate:startTime]);
}