如何获取CPU的使用率

飘雪831101 2008-08-21 04:44:20
通过编程,怎么获取CPU的使用率啊.就像任务管理器那样,获取单个进程的CPU使用率.
...全文
488 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
吹泡泡的小猫 2008-08-22
  • 打赏
  • 举报
回复
使用系统的性能计数,就是PDH,有个达人对此有个封装类,就是Cpdh,google一下
飘雪831101 2008-08-22
  • 打赏
  • 举报
回复
如果获得具体某个进行的CPU使用率呢?
飘雪831101 2008-08-22
  • 打赏
  • 举报
回复
我用pdh中的添加计数器时,返回值是错误的.那名称应该如何写啊?
pdhStatus = PdhAddCounter (hQuery, TEXT("\\Network Interface(Realtek RTL8139 Family PCI Fast Ethernet NIC)\\Byte Total"), 0, pCounterHandle);
这样正确吗?Network Interface(网卡型号).
飘雪831101 2008-08-22
  • 打赏
  • 举报
回复
我能再顺便问一下,如何获得网卡的使用率?就像任务管理器中的那样.

flm007 2008-08-21
  • 打赏
  • 举报
回复

typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);
PROCNTQSI NtQuerySystemInformation;

NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
GetModuleHandle("ntdll"),
"NtQuerySystemInformation"
);
if (!NtQuerySystemInformation)
{
return;
}

// get number of processors in the system
status = NtQuerySystemInformation(SystemBasicInformation,
&SysBaseInfo,sizeof(SysBaseInfo),NULL);
if (status != NO_ERROR)
{
return;
}
status = NtQuerySystemInformation(SystemTimeInformation,
&SysTimeInfo,sizeof(SysTimeInfo),0);
if (status!=NO_ERROR)
{
return;
}
// get new CPU''s idle time
status = NtQuerySystemInformation(SystemPerformanceInformation,
&SysPerfInfo,sizeof(SysPerfInfo),NULL);
if (status != NO_ERROR)
{
return;
}
// if it''s a first call - skip it
if (m_liOldIdleTime.QuadPart != 0)
{
// CurrentValue = NewValue - OldValue
dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(m_liOldIdleTime);
dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(m_liOldSystemTime);

// CurrentCpuIdle = IdleTime / SystemTime
dbIdleTime = dbIdleTime / dbSystemTime;

// CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5;

m_fNewUsges = (UINT)dbIdleTime;
}



MEMORYSTATUS MemStat;
MemStat.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&MemStat);
m_ulNewUsges = MemStat.dwMemoryLoad;

使用:

CMemUsgesCtl m_ MyMemCtrl;
CCpuUsgesCtl m_ MyCpuCtrl;
…………
if(!m_MyCpuCtrl.Create(WS_CHILD | WS_VISIBLE, rect, this, IDC_CPUCTL))
{
TRACE0("Create m_MyCtrl Failed!");
return 0;
}

rect.left = rect.right + 20;
rect.right += lpCreateStruct->cx / 2;

if(!m_MyMemCtrl.Create(WS_CHILD | WS_VISIBLE,rect, this, IDC_MEMCTL))
{
TRACE0("Create m_MyCtrl Failed!");
return 0;
}
weiym 2008-08-21
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/finddoc.asp?keyword=CPU
cnzdgs 2008-08-21
  • 打赏
  • 举报
回复
OpenProcess、GetProcessTimes可以获得各个进程的运行时间,自己定时获取进程的运行时间来计算CPU使用率。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧