为了账号安全,请及时绑定邮箱和手机立即绑定

iOS-从应用程序获取CPU使用率

iOS-从应用程序获取CPU使用率

交互式爱情 2019-12-10 10:42:41
有谁知道如何获取应用程序的CPU使用率?绝对有可能,因为应用商店中有一些可以显示它的应用程序(Activity Monitor Touch)。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

尝试这个:


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

}

但是,该方法会根据每个过程的起点来计算百分比。如果您正在寻找更传统的方法来计算这些数字


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 1066 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信