gpt4 book ai didi

objective-c - 在 macOS 上获取 CPU 使用百分比

转载 作者:太空狗 更新时间:2023-10-30 03:09:01 35 4
gpt4 key购买 nike

我是 Objective-C 的初学者,我决定尝试编写一些简单的应用程序,所以我正在尝试制作一个可以测量 CPU 使用率等的应用程序。有没有一种简单的方法可以在 Cocoa 应用程序中使用 Objective-C 获取 CPU 使用百分比等信息?

我找到了这个问题Determine Process Info Programmatically in Darwin/OSX这是相似的,但不完全相同。主要是,我想要整个系统的 CPU 使用百分比,而不仅仅是我的进程,我实际上更喜欢 Objective-C 解决方案,而在那个问题中,发帖者想要其他东西。

最佳答案

这是我的做法:

*.h文件:

#include <sys/sysctl.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <mach/processor_info.h>
#include <mach/mach_host.h>

变量:

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

*.m文件

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

关于objective-c - 在 macOS 上获取 CPU 使用百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785069/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com