Retrieving CPU Load Percent total in Windows with C++

后端 未结 3 787
余生分开走
余生分开走 2020-12-13 01:04

I\'ve been working on this tool to quickly log some system stats, like memory info, and cpu load percentage (like what\'s shown in the Task Manager). I seem

3条回答
  •  难免孤独
    2020-12-13 01:29

    This code is take for Cpu Usage

    FILETIME prevSysIdle, prevSysKernel, prevSysUser;
    
    int getUsage(double &val)
    {
        FILETIME sysIdle, sysKernel, sysUser;
        // sysKernel include IdleTime
        if (GetSystemTimes(&sysIdle, &sysKernel, &sysUser) == 0) // GetSystemTimes func FAILED return value is zero;
            return 0;
    
        if (prevSysIdle.dwLowDateTime != 0 && prevSysIdle.dwHighDateTime != 0)
        {
            ULONGLONG sysIdleDiff, sysKernelDiff, sysUserDiff;
            sysIdleDiff = SubtractTimes(sysIdle, prevSysIdle);
            sysKernelDiff = SubtractTimes(sysKernel, prevSysKernel);
            sysUserDiff = SubtractTimes(sysUser, prevSysUser);
    
            ULONGLONG sysTotal = sysKernelDiff + sysUserDiff;
            ULONGLONG kernelTotal = sysKernelDiff - sysIdleDiff; // kernelTime - IdleTime = kernelTime, because sysKernel include IdleTime
    
            if (sysTotal > 0) // sometimes kernelTime > idleTime
                val = (double)(((kernelTotal + sysUserDiff) * 100.0) / sysTotal);
        }
    
        prevSysIdle = sysIdle;
        prevSysKernel = sysKernel;
        prevSysUser = sysUser;
    
        return 1;
    }
    
    
    // TIME DIFF FUNC
    ULONGLONG SubtractTimes(const FILETIME one, const FILETIME two)
    {
        LARGE_INTEGER a, b;
        a.LowPart = one.dwLowDateTime;
        a.HighPart = one.dwHighDateTime;
    
        b.LowPart = two.dwLowDateTime;
        b.HighPart = two.dwHighDateTime;
    
        return a.QuadPart - b.QuadPart;
    }
    

提交回复
热议问题