windows利用系统api获取的系统的cpu利用率为什么和任务管理器的不一致?

windows利用系统api获取的系统的cpu利用率为什么和任务管理器的不一致。
具体代码如下,我的电脑T480S,64位系统,运行的结果比任务管理器的第不少,大概低10%-25%

#include <Windows.h>
#include <iostream>
static bool getSystemCPUTime(ULONGLONG& totalTime, ULONGLONG& idleTime)
{
    FILETIME ftSysIdle, ftSysKernel, ftSysUser;

    if (!GetSystemTimes(&ftSysIdle, &ftSysKernel, &ftSysUser))
    {
        return false;
    }

    ULARGE_INTEGER sysKernel, sysUser, sysIdle;
    sysKernel.HighPart = ftSysKernel.dwHighDateTime;
    sysKernel.LowPart = ftSysKernel.dwLowDateTime;
    sysUser.HighPart = ftSysUser.dwHighDateTime;
    sysUser.LowPart = ftSysUser.dwLowDateTime;
    sysIdle.HighPart = ftSysIdle.dwHighDateTime;
    sysIdle.LowPart = ftSysIdle.dwLowDateTime;

    totalTime = sysKernel.QuadPart + sysUser.QuadPart;
    idleTime = sysIdle.QuadPart;

    return true;
}
int main()
{
    unsigned int interval = 1000;
    ULONGLONG totalPrev = 0, totalCurr = 0;
    ULONGLONG idlePrev = 0, idleCurr = 0;
    unsigned int totalCPUUsage = 0;

    getSystemCPUTime(totalPrev, idlePrev);

    while (true)
    {

        Sleep(1000);

        if (getSystemCPUTime(totalCurr, idleCurr))
        {
            LONGLONG total = totalCurr - totalPrev;

            if (total > 0)
            {
                LONGLONG idle = idleCurr - idlePrev;
                totalCPUUsage = static_cast<unsigned int>(100 * (total - idle) / (total));
                std::cout << "cpu usage is " << totalCPUUsage << std::endl;
            }
        }

        totalPrev = totalCurr;
        idlePrev = idleCurr;
    }
}

https://blog.csdn.net/dawnstar_hoo/article/details/4245995