Получить процентное использование процессора

Я новичок в Objective-C, и я решил попытаться написать какое-то простое приложение, поэтому я пытаюсь создать приложение, которое будет измерять использование ЦП и т. Д. Есть ли простой способ получить информацию, такую ​​как процентное использование процессора с использованием Objective-C в приложении Cocoa?

Я нашел этот вопрос. Определить информацию о процессе программно в Darwin / OSX, который похож, но не совсем то же самое. В основном, я хочу, чтобы процентное использование процессора всей системы, а не только мой процесс, и я бы предпочел решение Objective-C, тогда как в этом вопросе плакат хотел что-то еще.

Вот как я это сделал:

* .h файл:

 #include  #include  #include  #include  #include  

Ивар:

 processor_info_array_t cpuInfo, prevCpuInfo; mach_msg_type_number_t numCpuInfo, numPrevCpuInfo; unsigned numCPUs; NSTimer *updateTimer; NSLock *CPUUsageLock; 

* .m file

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { int mib[2U] = { CTL_HW, HW_NCPU }; size_t sizeOfNumCPUs = sizeof(numCPUs); int status = sysctl(mib, 2U, &numCPUs, &sizeOfNumCPUs, NULL, 0U); if(status) numCPUs = 1; CPUUsageLock = [[NSLock alloc] init]; updateTimer = [[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(updateInfo:) userInfo:nil repeats:YES] retain]; } - (void)updateInfo:(NSTimer *)timer { natural_t numCPUsU = 0U; kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numCPUsU, &cpuInfo, &numCpuInfo); if(err == KERN_SUCCESS) { [CPUUsageLock lock]; for(unsigned i = 0U; i < numCPUs; ++i) { float inUse, total; if(prevCpuInfo) { inUse = ( (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER]) + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM]) + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE]) ); total = inUse + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]); } else { inUse = cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE]; total = inUse + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]; } NSLog(@"Core: %u Usage: %f",i,inUse / total); } [CPUUsageLock unlock]; if(prevCpuInfo) { size_t prevCpuInfoSize = sizeof(integer_t) * numPrevCpuInfo; vm_deallocate(mach_task_self(), (vm_address_t)prevCpuInfo, prevCpuInfoSize); } prevCpuInfo = cpuInfo; numPrevCpuInfo = numCpuInfo; cpuInfo = NULL; numCpuInfo = 0U; } else { NSLog(@"Error!"); [NSApp terminate:nil]; } } 
  • Данные перезагрузки UITableView
  • Что означает подчеркивание в имени переменной-члена в Objective-C?
  • Формат NSDate, выводящий неверную дату
  • как сделать программный снимок экрана для iPhone?
  • Получение списка файлов в каталоге с глобусом
  • Полноэкранный UIView со строкой состояния и наложением панели навигации наверху
  • Комплект iPhone Store «Не удается подключиться к iTunes Store»
  • Очереди отправки: как узнать, запущены ли они и как их остановить
  • Округлые углы только на вершине UIView
  • Как изменить определенный цвет в изображении?
  • AppDelegate, rootViewController и presentViewController
  • Давайте будем гением компьютера.