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

Я новичок в 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]; } } 
  • iPhone: конвертировать строку даты в относительную отметку времени
  • Как использовать UIPanGestureRecognizer для перемещения объекта? iPhone / IPad
  • Отправить почту без MFMailComposeViewController
  • objective-C: Как получить адрес маршрутизатора?
  • Круговые контрольные бары в IOS
  • iOS8 - ограничения двусмысленно указывают на высоту нуля
  • Как получить текущее название города?
  • Опубликовать фотографию на стене пользователя, используя Facebook iOS SDK
  • Как настроить размер содержимого UIScrollView динамически
  • Ошибка с NSJSONSerialization - Недопустимый тип записи JSON (меню)
  • Что такое Swift-эквивалент ответаSoSelector?
  • Давайте будем гением компьютера.