【问题标题】:Getting current cpu usage in c++/windows for particular process在 c++/windows 中获取特定进程的当前 cpu 使用情况
【发布时间】:2013-08-07 06:19:48
【问题描述】:

我想在我的代码中计算特定应用程序的当前 cpu 使用率。我在互联网上查找并找到了适用于 Windows 的 pdh 库。当我尝试它时,我得到的是整体 cpu 使用率,而不是一个进程的 cpu 使用率。

PdhAddCounter(hquery, TEXT("\\Processor(_Total)\\% Processor Time"),0,&counter);

那么我如何使用这条线来获取特定进程的 cpu 使用率?我尝试用进程名称(资源管理器)替换 _Total。那时我的 CPU 使用率为 0。但是我检查了资源监视器,一次打开多个窗口会使 CPU 使用率增加 20%。仍在日志文件中 cpu 使用率显示为 0。

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

  • 你能发布你想出的解决方案吗?
  • 同样的问题有一个很好的答案here

标签: c++ windows cpu cpu-usage pdh


【解决方案1】:

你需要使用GetProcessTimes

不幸的是,它不会为您提供“CPU 使用率”,它会为您提供自进程启动以来的 CPU 时间量。因此,要获取 CPU 使用率,您需要采集一个样本,存储它,然后在已知时间后采集另一个样本,然后计算时间(如果您想知道总使用量,您需要当然,将usertimekerneltime 加在一起)。

【讨论】:

  • 感谢您的回复。但是我认为你没有理解或者我没有很好地解释。假设 chrome.exe 是一个进程。在任何时候,某个进程都会占用一定百分比的 cpu 使用率。它显示在资源监视器中的 cpu 选项卡下,每个进程都单独显示。我想要那个号码。我有单独的线程。所以我想要特定进程的 cpu 使用率(即本例中的 chrome.exe)。总的来说,我们可以在任务管理器中看到的所有进程消耗的总体 CPU 使用率。
  • 我的建议会给你。您将不得不做一些编码来计算出百分比(以及您感兴趣的过程的句柄)。
  • 我有另一种方法。
  • @Darshan:您可以发布您的解决方案作为答案来帮助他人并获得积分。
【解决方案2】:

例如,您可以查看this。解释了该项目中的所有内容。它会根据进程 ID 分配内存(与任务管理器中显示的方式相同)

谢谢, 达山

【讨论】:

  • 这和原来的问题有什么关系?您要求的是 CPU 使用率,而不是内存...
  • 内存使用和 CPU 使用是两个截然不同的东西。
  • 他问自己一个问题,然后自己回答,却没有注意到他回答了一个完全不同的问题......这是“现在,我已经看到了一切”包的补充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2010-10-03
  • 2019-05-02
  • 2011-07-13
  • 1970-01-01
  • 2018-07-23
  • 2010-11-18
相关资源
最近更新 更多