我发现这个问题Determine Process Info Programmatically in Darwin/OSX是相似的,但不完全一样。主要是,我想要整个系统的cpu百分比使用,而不只是我的过程,我实际喜欢一个Objective-C解决方案,而在那个问题海报想要别的东西。
解决方法 这是我做的方式:* .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 – 获取CPU百分比使用率全部内容,希望文章能够帮你解决objective-c – 获取CPU百分比使用率所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)