4

我目前正在开发一个需要了解 CPU 利用率的 MFC 应用程序。它可能在不同的时间点有多个线程,但大部分工作都是由主线程完成的。

我正在尝试找到一种方法来计算该主线程使用的 CPU 百分比。但是,我遇到了一些问题,即如何在多 CPU / 多核环境中准确地完成此任务。问题是大多数系统调用似乎都提供了系统信息,而我需要特定于我的主线程正在其上执行的处理器的信息。

我看过 WMI,但它似乎对这项任务来说太过分了。GetThreadTimes() 能满足我的需要吗?

4

1 回答 1

7

您的主线程可能在不同的时间在不同的 CPU 上执行,因此“特定于我的主线程正在执行的处理器的信息”可能毫无意义——它很可能是所有处理器。Windows 不会跟踪线程在哪个 CPU 上执行了多少时间,所以你不能问“给我这个线程每个 CPU 的执行时间列表”。唯一的例外是当您将线程关联掩码设置为单个 CPU 时,您可以确定如果线程完全执行,它会在该单个 CPU 上运行。

对于计算运行时间,GetThreadTimes 是正确的 API,是的。如果您想要进程使用的(理论)CPU 的百分比,请计算

(kerneltime+usertime) / (now - starttime) / numberofcpus

当然,这个公式假设所有 CPU 都具有相同的速度。如果要显示线程最近消耗的 CPU 部分,每秒采样一次 GetThreadTimes,然后计算

(usedtimenow - usedtimeprevious) / (now - previous) / numberofcpus

如果您每秒采样一次,现在-之前大约为 1,但无论如何您都应该记录采样时间 - 系统可能不会让您在采样之间准确睡眠 1 秒。

于 2008-11-04T05:23:31.660 回答