gpt4 book ai didi

winapi - Win32 : Calculate Thread CPU Utilization in a Multi-Core/Multi-Processor System

转载 作者:行者123 更新时间:2023-12-05 00:09:33 31 4
gpt4 key购买 nike

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

我试图找到一种方法来计算这个主线程使用的 CPU 的百分比。但是,我遇到了一些关于如何在多 CPU/多核环境中实现这一点的问题。问题是大多数系统调用似乎都提供系统信息,而我需要特定于我的主线程正在执行的处理器的信息。

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

最佳答案

您的主线程可能会在不同的时间在不同的 CPU 上执行,因此“特定于我的主线程正在执行的处理器的信息”可能毫无意义 - 它很可能是所有处理器。 Windows 不会跟踪线程在哪个 CPU 上执行的时间,因此您不能要求“给我一个该线程的执行时间列表,每个 CPU”。唯一的异常(exception)是当您将线程关联掩码设置为单个 CPU 时 - 那么您可以确定,如果线程完全执行,它会在该单个 CPU 上运行。

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

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

当然,这个公式假设所有 CPU 都具有相同的速度。如果要显示线程最近消耗的 CPU 部分,请每秒采样 GetThreadTimes,然后计算
(usedtimenow - usedtimeprevious) / (now - previous) / numberofcpus

如果您每秒采样一次,那么 now-previous 大约为 1,但无论如何您应该记录采样时间 - 系统可能不会让您在两次采样之间恰好睡 1 秒。

关于winapi - Win32 : Calculate Thread CPU Utilization in a Multi-Core/Multi-Processor System,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260636/

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