10
如何獲得與不同狀態的CPU使用率在IOS例如獲取不同狀態
1.Idle
2.Running用戶空間的iOS詳細的CPU使用率
3 。運行內核/系統
CPU使用率示例如this提供總CPU美國ge只有像下面這樣。我怎樣才能檢查使用中的不同狀態? 有什麼幫助嗎?
可用一般使用例子大多是象下面這樣:
- (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_sec = 0;
long tot_usec = 0;
float tot_cpu = 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 0
tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds;
//This is 0
tot_usec = tot_usec + basic_info_th->system_time.microseconds + basic_info_th->system_time.microseconds;
//This is total
tot_cpu = tot_cpu + basic_info_th->cpu_usage/(float)TH_USAGE_SCALE * 100.0;
}
} // for each thread
kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));
assert(kr == KERN_SUCCESS);
return [NSString stringWithFormat:@"%.2f",tot_cpu];
}
編輯
我也嘗試提到的示例。 here,但內核/系統讀數始終在實際設備上返回0。 這是正確的嗎?我不確定。
https://stackoverflow.com/a/44123852/4417447這似乎很有幫助。嘗試這個。 – santak
[iOS - 從應用程序獲取CPU使用情況]的可能重複(https://stackoverflow.com/questions/8223348/ios-get-cpu-usage-from-application) –