【发布时间】:2023-02-07 18:06:32
【问题描述】:
我写了下面的代码来获取窗口机器上的当前 cpu 使用率。但是我注意到一些不寻常的尖峰。我得到的百分比十分之九在 2-5 之间,然后突然飙升到 95% 以上,这与任务管理器显示的内容不一致...有人可以指出是否有任何问题我做错了吗?
#include <iostream>
#include <sstream>
#include <chrono>
#include <thread>
#include <vector>
#include <Windows.h>
float roundPercentage(const double& d) {
std::ostringstream tmp;
tmp << d;
std::string str = tmp.str();
return (float)(std::round(std::stof(str.substr(0, 5)) * 100) / 100);
}
int main() {
while (true) {
FILETIME idle_time, kernel_time, user_time;
std::vector<FILETIME> last_values;
GetSystemTimes(&idle_time, &kernel_time, &user_time);
last_values.push_back(kernel_time);
last_values.push_back(user_time);
std::this_thread::sleep_for(std::chrono::milliseconds(500));
GetSystemTimes(&idle_time, &kernel_time, &user_time);
unsigned long long current_value = (kernel_time.dwLowDateTime + kernel_time.dwHighDateTime) + (user_time.dwLowDateTime + user_time.dwHighDateTime);
unsigned long long last_value = (last_values[0].dwLowDateTime + last_values[0].dwHighDateTime) + (last_values[1].dwLowDateTime + last_values[1].dwHighDateTime);
double d = (double)(last_value - current_value) / (double)(last_value + current_value) * 100.0;
std::cout << "cpu usage: " << roundPercentage(d) << "%" << std::endl;
}
return 0;
}
【问题讨论】:
-
dwLowDateTime + dwHighDateTime是胡说八道,没有任何用处 -
这回答了你的问题了吗? What is dwLowDateTime and dwHighDateTime
-
是的,我应该先调查一下