烙印99
尝试这个:- (NSString *)cpuUsage{ kern_return_t kr; task_info_data_t tinfo; mach_msg_type_number_t task_info_count; task_info_count = TASK_INFO_MAX; kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count); if (kr != KERN_SUCCESS) { return @"NA"; } task_basic_info_t basic_info; 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; uint32_t stat_thread = 0; // Mach threads basic_info = (task_basic_info_t)tinfo; // get threads in the task kr = task_threads(mach_task_self(), &thread_list, &thread_count); if (kr != KERN_SUCCESS) { return @"NA"; } if (thread_count > 0) stat_thread += thread_count; long tot_idle = 0; long tot_user = 0; long tot_kernel = 0; int j; for (j = 0; j < thread_count; j++) { thread_info_count = THREAD_INFO_MAX; kr = thread_info(thread_list[j], THREAD_BASIC_INFO, (thread_info_t)thinfo, &thread_info_count); if (kr != KERN_SUCCESS) { return nil; } basic_info_th = (thread_basic_info_t)thinfo; if (basic_info_th->flags & TH_FLAGS_IDLE) { //This is idle tot_idle = tot_idle + basic_info_th->user_time.microseconds + basic_info_th->system_time.microseconds; } else { //This is user tot_user = tot_user + basic_info_th->user_time.microseconds; //This is kernel tot_kernel = tot_kernel + basic_info_th->system_time.microseconds; } } // for each thread kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t)); assert(kr == KERN_SUCCESS); long tot_cpu = tot_idle + tot_user + tot_kernel return [NSString stringWithFormat:@"Idle: %.2f, User: %.2f, Kernel: %.2f", tot_idle/tot_cpu, tot_user/tot_cpu, tot_kernel/tot_cpu];}但是,该方法会根据每个过程的起点来计算百分比。如果您正在寻找更传统的方法来计算这些数字