gpt4 book ai didi

c# - 计算 Windows Mobile/CE 设备上的当前 CPU 使用率

转载 作者:行者123 更新时间:2023-11-28 06:45:40 25 4
gpt4 key购买 nike

在核心系统中,没有单个调用可以检索整个系统的 CPU 使用率。根据我在网上找到的一些示例代码,我需要计算这个总百分比,但我无法理解所涉及的数学,我希望有人能在这方面提供帮助。

我用 C# 编写此代码并调用一些函数来获取线程计时。下面是我到目前为止得到的代码。对于每个正在运行的线程,我可以使用 GetThreadTick 和 GetThreadTimings 获取计时。我只是想不出这些值将如何帮助我计算 CPU 使用率百分比。

我也知道我所做的任何计算都会影响 CPU 使用率本身。

    public static int Calc()
{
int dwCurrentThreadTime1 = 0;
int dwCurrentThreadTime2 = 0;

FILETIME ftCreationTime = new FILETIME();
FILETIME ftExitTime = new FILETIME();
FILETIME ftKernelTime = new FILETIME();
FILETIME ftUserTime = new FILETIME();
PROCESSENTRY pe32 = new PROCESSENTRY();
THREADENTRY32 te32 = new THREADENTRY32();

IntPtr hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD, 0);
if (hsnapshot == IntPtr.Zero)
return -1;

pe32.dwSize = (uint)Marshal.SizeOf(pe32);
te32.dwSize = Marshal.SizeOf(te32);

int retval = Process32First(hsnapshot, ref pe32);

while (retval == 1)
{
int retval2 = Thread32First(hsnapshot, ref te32);

while(retval2 == 1)
{
if (te32.th32OwnerProcessID == pe32.th32ProcessID)
{
int dwCurrentTickTime1 = GetTickCount();
GetThreadTimes((IntPtr)te32.th32ThreadID, ref ftCreationTime, ref ftExitTime, ref ftKernelTime, ref ftUserTime);

GetThreadTick(ref ftKernelTime, ref ftUserTime);
}
retval2 = Thread32Next(hsnapshot, ref te32);
}
retval = Process32Next(hsnapshot, ref pe32);
}
CloseToolhelp32Snapshot(hsnapshot);
return dwCurrentThreadTime1;
}

最佳答案

您可以使用 GetIdleTime 或 CeGetIdleTimeEx(单核或多核版本)获取 CPU 处于空闲状态的时间,并使用此值计算 CPU(或每个内核)的负载百分比。此功能要求 BSP 支持空闲计数器,如果 BSP 中缺少此支持,您将无法获得有意义的值。

关于c# - 计算 Windows Mobile/CE 设备上的当前 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25041749/

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