Получить процентное использование процессора
Я новичок в Objective-C, и я решил попытаться написать какое-то простое приложение, поэтому я пытаюсь создать приложение, которое будет измерять использование ЦП и т. Д. Есть ли простой способ получить информацию, такую как процентное использование процессора с использованием Objective-C в приложении Cocoa?
Я нашел этот вопрос. Определить информацию о процессе программно в Darwin / OSX, который похож, но не совсем то же самое. В основном, я хочу, чтобы процентное использование процессора всей системы, а не только мой процесс, и я бы предпочел решение Objective-C, тогда как в этом вопросе плакат хотел что-то еще.
- objective C: Как вы можете повернуть текст для UIButton и UILabel?
- Класс Foo реализован как в MyApp, так и в MyAppTestCase. Один из двух будет использован. Какой из них не определен
- Должен ли я использовать NSUserDefaults или plist для хранения данных?
- захват себя в этом блоке, вероятно, приведет к циклу сохранения
- Рисование поэтапно в UIView (iPhone)
- Как обрабатывать дублируемую символьную ошибку от сторонних библиотек?
- как создать круглую кнопку?
- Сравнение поплавковых и двойных типов данных в объекте C
- Как реализовать представление аккордеона для iPhone SDK-приложения?
- UITableView, прокрутите вниз до перезагрузки?
- Преобразование миллисекунд в NSDate
- Как использовать performSelector: withObject: afterDelay: с примитивными типами в cocoa?
- используя objc_msgSend для вызова функции 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]; } }