加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winapi – Win32:计算多核/多处理器系统中的线程CPU利用率

发布时间:2020-12-14 01:36:02 所属栏目:Windows 来源:网络整理
导读:我目前正在研究一个需要了解CPU利用率的MFC应用程序.它可能在不同的时间点有多个线程,但大部分工作是由主线程完成的. 我试图找到一种方法来计算这个主线程使用的CPU百分比.但是,我遇到了一些问题,如何在多CPU /多核环境中实现这一目标.问题是大多数系统调用
我目前正在研究一个需要了解CPU利用率的MFC应用程序.它可能在不同的时间点有多个线程,但大部分工作是由主线程完成的.

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

我看过WMI,但这对任务来说似乎太过分了. GetThreadTimes()能否满足我的需求?

解决方法

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读