ios获取cpu占用率代码如下:
#pragma mark - CPU
- (float)getCpuUsage
{
kern_return_t kr;
thread_array_t thread_list;
mach_msg_type_number_t thread_count;
thread_info_data_t thinfo;
mach_msg_type_number_t thread_info_count;
thread_basic_info_t basic_info_th;
//获取当前进程中线程列表
kr = task_threads(mach_task_self(), &thread_list, &thread_count);
if (kr != KERN_SUCCESS) {
return -1;
}
float cpu_usage = 0;
for (int i = 0; i < thread_count; i++)
{
thread_info_count = THREAD_INFO_MAX;
//获取每一个线程信息
kr = thread_info(thread_list[i], THREAD_BASIC_INFO,(thread_info_t)thinfo, &thread_info_count);
if (kr != KERN_SUCCESS) {
return -1;
}
basic_info_th = (thread_basic_info_t)thinfo;
if (!(basic_info_th->flags & TH_FLAGS_IDLE))
{
cpu_usage += basic_info_th->cpu_usage;
}
}
//宏定义TH_USAGE_SCALE返回CPU处理总频率
cpu_usage = cpu_usage / (float)TH_USAGE_SCALE * 100.0;
//注意方法最后要调用 vm_deallocate,防止出现内存泄漏
vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));
return cpu_usage;
}
和instrument里面activity monitor进行对比,数据虽然不能严格匹配上,但是总体的曲线趋势是一样的,如果cpu占用率稳定的情况下,百分比相差不是很大