【问题标题】:Win32: Calculate Thread CPU Utilization in a Multi-Core / Multi-Processor SystemWin32:计算多核/多处理器系统中的线程 CPU 利用率
【发布时间】:2008-11-04 02:32:11
【问题描述】:

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

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

我已经查看了 WMI,但它似乎对这项任务来说有点过头了。 GetThreadTimes() 能满足我的需要吗?

【问题讨论】:

    标签: winapi cpu multicore


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      相关资源
      最近更新 更多