您的位置:首页 > 其它

CPU使用率

2016-01-19 14:24 148 查看
定义静态this指针  :static C任务管理器Dlg * m_this;
在构造函数之前初始化 :C任务管理器Dlg * C任务管理器Dlg::m_this = nullptr;
在构造函数里赋值: m_this = this;
之后可以用m_this调用类中任何变量。

创建线程设置CPU: CreateThread(0, 0, SetCPU,0, 0, 0);

 回调函数:
DWORD    WINAPI
   C任务管理器Dlg::SetCPU( LPVOIDlpThreadParameter )
{
    //第一次获取CPU时间
    FILETIME
   idleTime, kernelTime, userTime;
    GetSystemTimes(&idleTime,
&kernelTime, &userTime);
 
    //创建内核对象,等待1000ms
    HANDLE
   hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    WaitForSingleObject(hEvent,
1000);
 
    //第二次获取CPU时间
    FILETIME
   preidleTime, prekernelTime, preuserTime;
    GetSystemTimes(&preidleTime,
&prekernelTime, &preuserTime);
 
    double    IdleTime =
(double)(idleTime.dwHighDateTime*4.294967296E9)
+ (double)(idleTime.dwLowDateTime);
    double    KernelTime =
(double)(kernelTime.dwHighDateTime*4.294967296E9)
+ (double)(kernelTime.dwLowDateTime);
    double    UserTime =
(double)(userTime.dwHighDateTime*4.294967296E9)
+ (double)(userTime.dwLowDateTime);
 
    double    preIdleTime =
(double)(preidleTime.dwHighDateTime*4.294967296E9)
+ (double)(preidleTime.dwLowDateTime);
    double    preKernelTime =
(double)(prekernelTime.dwHighDateTime*4.294967296E9)
+ (double)(prekernelTime.dwLowDateTime);
    double    preUserTime =
(double)(preuserTime.dwHighDateTime*4.294967296E9)
+ (double)(preuserTime.dwLowDateTime);
 
    //计算CPU使用率
    int    CPUUseage =
(int)(100.0 - (preIdleTime - IdleTime)
/ (preKernelTime - KernelTime + preUserTime - UserTime)*100.0);
 
    CString    CPU;
    CPU.Format(_T("%d%%"),
(CPUUseage));
    m_this->m_CPU.SetWindowText(CPU);
    return 0;
}
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: