gpt4 book ai didi

c++ - 为什么这种获取 CPU 利用率的方法产生的结果比任务管理器中的方法低 2 倍?

转载 作者:行者123 更新时间:2023-12-02 10:38:58 36 4
gpt4 key购买 nike

我正在使用以下方法来检测 CPU 利用率:

#include "pch.h"
#include <iostream>
#include <Windows.h>

int get_CPU_Usage(void);


int main()
{
COORD c = {0};
HANDLE hStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE);

for(;; ::Sleep(500))
{
::SetConsoleCursorPosition(hStdOut, c);
wprintf(L"Current CPU usage: %d%%\t\t\n", get_CPU_Usage());
}

}




int get_CPU_Usage(void)
{
//RETURN: = CPU Usage in percent [0 - 100], or
// = -1 if error
int nRes = -1;

//Run system function
FILETIME ftIdle, ftKrnl, ftUsr;
if(::GetSystemTimes(&ftIdle, &ftKrnl, &ftUsr))
{
//Now calculate value
static BOOL bUsedOnce = FALSE;
static ULONGLONG uOldIdle = 0;
static ULONGLONG uOldKrnl = 0;
static ULONGLONG uOldUsr = 0;

ULONGLONG uIdle = ((ULONGLONG)ftIdle.dwHighDateTime << 32) | ftIdle.dwLowDateTime;
ULONGLONG uKrnl = ((ULONGLONG)ftKrnl.dwHighDateTime << 32) | ftKrnl.dwLowDateTime;
ULONGLONG uUsr = ((ULONGLONG)ftUsr.dwHighDateTime << 32) | ftUsr.dwLowDateTime;

//Only if we have previous values
if(bUsedOnce)
{
ULONGLONG uDiffIdle = uIdle - uOldIdle;
ULONGLONG uDiffKrnl = uKrnl - uOldKrnl;
ULONGLONG uDiffUsr = uUsr - uOldUsr;

if(uDiffKrnl + uDiffUsr)
{
//Calculate percentage
nRes = (int)((uDiffKrnl + uDiffUsr - uDiffIdle) * 100 / (uDiffKrnl + uDiffUsr));

//Check value and correct it (Just in case)
if(nRes < 0)
nRes = 0;
else if(nRes > 100)
nRes = 100;
}
}

//Remember data
bUsedOnce = TRUE;
uOldIdle = uIdle;
uOldKrnl = uKrnl;
uOldUsr = uUsr;
}

return nRes;
}

它曾经在我运行 Windows 8.1 的旧计算机上提供可比较的读数,但现在当我在这个桌面上运行它时使用 Intel(R) Core(TM) i9-7940X CPU @ 3.10GHz在 Windows 10 Pro 上,它给我的结果似乎比任务管理器显示的结果低 2 倍:

enter image description here

很难通过屏幕截图来捕捉它,但我肯定可以从上面的代码中看到始终较低的数字。

所以我想知道,为什么会有这样的差异?

PS。我正在测试它的 CPU 有 14 个物理内核和 28 个逻辑内核。这会以某种方式影响 GetSystemTimes 的输出吗?功能?

最佳答案

在 Windows 10 中,任务管理器支持超线程。假设您有 2 个物理核心和总共 4 个逻辑核心。将 2 个核心置于满负荷状态,tasklist 将显示 100%,而您的方法将显示 50%,当所有 4 个逻辑核心都已填满时,tasklist 仍将显示 100%,然后您的方法也将显示 100%。

关于c++ - 为什么这种获取 CPU 利用率的方法产生的结果比任务管理器中的方法低 2 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54121585/

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