在运行时获取CPU使用率| iOS版 [英] Get CPU usage at runtime | iOS

查看:100
本文介绍了在运行时获取CPU使用率| iOS版的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有什么方法可以获得iPhone的整体CPU使用率。我见过一些应用程序,如电池医生和iPhone的系统活动监视器,显示整体CPU使用率。

Is there any way I can the get overall CPU usage of an iPhone. I have seen a few apps like Battery Doctor and System Activity Monitor for iPhones which display overall CPU usage.

我找到了一个解决方案,(链接到答案)但它只给了我应用程序的CPU使用率,而不是所有整体应用程序。

I found a solution, (link to the answer) but it only gives me the CPU usage of my app and not of all the overall apps.

推荐答案

请试试这个,这对你来说可能是一个好的开始。 仅在真实设备上测试过。

please, try this one, it might a good start for you. it has been tested on real device only.

processor_info_array_t _cpuInfo, _prevCPUInfo = nil;
mach_msg_type_number_t _numCPUInfo, _numPrevCPUInfo = 0;
unsigned _numCPUs;
NSLock *_cpuUsageLock;

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];

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) {
        Float32 _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: %.2f%%", i, _inUse / _total * 100.f);
    }

    [_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 = nil;
    _numCPUInfo = 0U;
} else {
    NSLog(@"Error!");
}

您还需要以下标题:

#import <sys/sysctl.h>
#import <sys/types.h>
#import <sys/param.h>
#import <sys/mount.h>
#import <mach/mach.h>
#import <mach/processor_info.h>
#import <mach/mach_host.h>

这篇关于在运行时获取CPU使用率| iOS版的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆