gpt4 book ai didi

c# - 如何以 MHz 为单位快照处理器各个内核的速度

转载 作者:行者123 更新时间:2023-11-30 12:59:59 33 4
gpt4 key购买 nike

我想创建一个应用程序,以 MHz 为单位监控并向用户显示系统处理器中每个内核的频率。我见过其他应用程序这样做,例如 Piriform's Speccy , 所以我知道这一定是可能的。

我曾尝试在 Stack Overflow 上搜索解决方案,但找不到。 Even this question ,这是我能找到的最接近的匹配项,说明了 C++ 中的反作弊实现,并没有提供实际的解决方案,但有一个重要的收获 this article describes :“随着电源管理技术在当今计算机中变得越来越普遍,获得高分辨率 CPU 时序的常用方法 RDTSC 指令可能不再按预期工作。”有这个想法。

我见过的最接近的是 management object has a MaxClockSpeed ,但这取决于处理器的速度,而不是处理器的各个内核的速度。

还有 CPUID System Information Monitoring Kit ,但这是一个开发套件,我没有钱。

所以...现在回到手头的问题,我如何以编程方式获取内核时钟速度的当前快照?一定有办法。

附言借助涡轮增压和其他技术,核心速度是可变的。这就是为什么我想将此信息作为当前时间快照获取。出于监控目的,这样的应用程序将对最终用户有所帮助,以便帮助他们检测他们的系统是否配置正确、工作正常,并允许他们监控他们的系统并查看负载下的性能等。另外,知道如何获取这些数据也没有什么坏处。

最佳答案

尝试 CallNtPowerInformation .这是一个 example由其他人:

#include <NTstatus.h>
#define WIN32_NO_STATUS
#include <windows.h>
#include <Powrprof.h>
#include <iostream>

typedef struct _PROCESSOR_POWER_INFORMATION {
ULONG Number;
ULONG MaxMhz;
ULONG CurrentMhz;
ULONG MhzLimit;
ULONG MaxIdleState;
ULONG CurrentIdleState;
} PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;

#pragma comment(lib, "Powrprof.lib")

int main()
{
// get the number or processors
SYSTEM_INFO si = {0};
::GetSystemInfo(&si);
// allocate buffer to get info for each processor
const int size = si.dwNumberOfProcessors * sizeof(PROCESSOR_POWER_INFORMATION);
LPBYTE pBuffer = new BYTE[size];

NTSTATUS status = ::CallNtPowerInformation(ProcessorInformation, NULL, 0, pBuffer, size);
if(STATUS_SUCCESS == status)
{
// list each processor frequency
PPROCESSOR_POWER_INFORMATION ppi = (PPROCESSOR_POWER_INFORMATION)pBuffer;
for(DWORD nIndex = 0; nIndex < si.dwNumberOfProcessors; nIndex++)
{
std::cout << "Processor #" << ppi->Number << " frequency: "
<< ppi->CurrentMhz << " MHz" << std::endl;
ppi++;
}
}
else
{
std::cout << "CallNtPowerInformation failed. Status: " << status << std::endl;
}
delete []pBuffer;
system("pause");
return status;
}

关于c# - 如何以 MHz 为单位快照处理器各个内核的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221391/

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