【发布时间】:2013-12-09 13:32:56
【问题描述】:
我需要在 OS X 上的 Objective C/C 中获取总 CPU 空闲时间?
如果可能,请提供执行此操作的代码示例。 这是我用来获取这些指标的代码。结果百分比与我在活动监视器中的百分比不同。所以我假设 CPU 时间计算不正确:
#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);
}
【问题讨论】:
-
看看-stackoverflow.com/questions/6785069/get-cpu-percent-usage。这计算了总使用量。所以,空闲时间 = 100% - 总使用率 %
-
实际上我使用相同的方法/代码,但当前和以前的指标之间存在计算差异。
标签: objective-c c macos cpu-usage