title: Get detailed iOS CPU usage with different states
body: <p>How to get CPU usage with different states in IOS for example </p>
  
  <p><strong>1.Idle</strong></p>
  
  <p><strong>2.Running a user space</strong></p>
  
  <p><strong>3.Running the kernel/system</strong></p>
  
  <p>The CPU usage example such as <a href="https://stackoverflow.com/questions/8223348/ios-get-cpu-usage-from-application/8382889#8382889">this</a>  provide total CPU usage only like below.How can I check the different states within the usage?
  Any help?</p>
  
  <p>A general usage example available mostly is like below :</p>
  
  <pre><code>- (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, &amp;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(), &amp;thread_list, &amp;thread_count);
     if (kr != KERN_SUCCESS)
     {
        return @"NA";
     }
     if (thread_count &gt; 0)
      stat_thread += thread_count;
  
     long tot_sec = 0;
     long tot_usec = 0;
     float tot_cpu = 0;
     int j;
  
     for (j = 0; j &lt; thread_count; j++)
     {
        thread_info_count = THREAD_INFO_MAX;
        kr = thread_info(thread_list[j], THREAD_BASIC_INFO,
                       (thread_info_t)thinfo, &amp;thread_info_count);
        if (kr != KERN_SUCCESS)
        {
            return nil;
        }
  
        basic_info_th = (thread_basic_info_t)thinfo;
  
        if (!(basic_info_th-&gt;flags &amp; TH_FLAGS_IDLE))
        {
            //This is 0
            tot_sec = tot_sec + basic_info_th-&gt;user_time.seconds + basic_info_th-&gt;system_time.seconds;
  
            //This is 0
            tot_usec = tot_usec + basic_info_th-&gt;system_time.microseconds + basic_info_th-&gt;system_time.microseconds;
  
            //This is total
            tot_cpu = tot_cpu + basic_info_th-&gt;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];
  }
  </code></pre>
  
  <p><strong>Edit</strong></p>
  
  <p>I did try the sample mentioned .<a href="https://stackoverflow.com/questions/20471920/how-to-get-total-cpu-idle-time-in-objective-c-c-on-os-x/20476923#20476923">here</a> but the kernel/system reading always return 0 on actual device.
  Is it correct? I am not sure.</p>