这里就是这样,我做到了:
* .h文件中:
#include <sys/sysctl.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <mach/processor_info.h>
#include <mach/mach_host.h>
的ivars:
processor_info_array_t cpuInfo, prevCpuInfo;
mach_msg_type_number_t numCpuInfo, numPrevCpuInfo;
unsigned numCPUs;
NSTimer *updateTimer;
NSLock *CPUUsageLock;
* .m文件
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
int mib[2U] = { CTL_HW, HW_NCPU };
size_t sizeOfNumCPUs = sizeof(numCPUs);
int status = sysctl(mib, 2U, &numCPUs, &sizeOfNumCPUs, NULL, 0U);
if(status)
numCPUs = 1;
CPUUsageLock = [[NSLock alloc] init];
updateTimer = [[NSTimer scheduledTimerWithTimeInterval:3
target:self
selector:@selector(updateInfo:)
userInfo:nil
repeats:YES] retain];
}
- (void)updateInfo:(NSTimer *)timer
{
natural_t numCPUsU = 0U;
kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numCPUsU, &cpuInfo, &numCpuInfo);
if(err == KERN_SUCCESS) {
[CPUUsageLock lock];
for(unsigned i = 0U; i < numCPUs; ++i) {
float inUse, total;
if(prevCpuInfo) {
inUse = (
(cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
+ (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
+ (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
);
total = inUse + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
} else {
inUse = cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
total = inUse + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
}
NSLog(@"Core: %u Usage: %f",i,inUse/total);
}
[CPUUsageLock unlock];
if(prevCpuInfo) {
size_t prevCpuInfoSize = sizeof(integer_t) * numPrevCpuInfo;
vm_deallocate(mach_task_self(), (vm_address_t)prevCpuInfo, prevCpuInfoSize);
}
prevCpuInfo = cpuInfo;
numPrevCpuInfo = numCpuInfo;
cpuInfo = NULL;
numCpuInfo = 0U;
} else {
NSLog(@"Error!");
[NSApp terminate:nil];
}
}
不是我在Objective C中知道的,但是因为Objective C是C的超集,所以可以使用['getloadavg'](http://developer.apple.com/library/mac/#documentation/Darwin /Reference/ManPages/man3/getloadavg.3.html)函数。 – highlycaffeinated
对不起,这个问题还没有完全清楚(编辑一下),但是我所看到的更多的是确定CPU使用率的方法(例如,顶部:'CPU使用率:3.62%用户,2.89%sys,93.47%闲置')比平均负载。有没有一种确定CPU使用率的好方法? – houbysoft
已更新为Swift。阅读此链接:[iOS - 从应用程序获取CPU使用情况](https://stackoverflow.com/questions/8223348/ios-get-cpu-usage-from-application) – Markus