Как получить общее время простоя процессора в Objective C / C на OS X?
Мне нужно получить общее время простоя процессора в Objective C / C на OS X?
Если возможно, приведите пример кода, который делает это. Вот код, который я использую, чтобы получить эти метрики. Как результат, процент не такой, как у меня в Activity Monitor. Таким образом, я предполагаю, что вычисление времени процессора неверно:
#include <sys/sysctl.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <mach/processor_info.h>
#include <mach/mach_host.h>
- (void)printCPUUsage
{
processor_cpu_load_info_t cpuLoad;
mach_msg_type_number_t processorMsgCount;
natural_t processorCount;
uint64_t totalSystemTime = 0, totalUserTime = 0, totalIdleTime = 0, totalCPUTime = 0;
kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &processorCount, (processor_info_array_t *)&cpuLoad, &processorMsgCount);
for (natural_t i = 0; i < processorCount; i++) {
// Calc load types and totals, with guards against 32-bit overflow
// (values are natural_t)
uint64_t system = 0, user = 0, idle = 0, total = 0;
system = cpuLoad[i].cpu_ticks[CPU_STATE_SYSTEM];
user = cpuLoad[i].cpu_ticks[CPU_STATE_USER];
idle = cpuLoad[i].cpu_ticks[CPU_STATE_IDLE];
total = system + user + idle;
if (total < 1) {
total = 1;
}
totalCPUTime += total;
totalSystemTime += system;
totalUserTime += user;
totalIdleTime += idle;
}
double onePercent = totalCPUTime/100.0f;
NSLog(@"system: %f", (double)totalSystemTime/(double)onePercent);
NSLog(@"user: %f", (double)totalUserTime/(double)onePercent);
NSLog(@"idle: %f", (double)totalIdleTime/(double)onePercent);
}