如何获得CPU使用率?

shuke 2000-03-03 07:21:00
一个思路是列举进程,取得每一个进程的句柄,从而得到每个进程的核心态和用户态时间。每隔一段时间,算出所有进程消耗的时间,得到CPU的使用率。但是,有些系统进程用户一般无法取得其句柄,比如system、winlogin这些进程。
应该如何解决?
或者有什么更简单的思路?我反汇编一个专门获得cpu使用率的小程序,看它所调用的api,似乎没有我所说的上一种思路所需要调用的api,应该是采用了其它办法。似乎更简单。
谢谢。
...全文
550 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
GoldenLion 2000-03-05
  • 打赏
  • 举报
回复
我已经mail给你了(你的mail address是<hhao@csnet4.cs.tsinghua.edu.cn>吧?),只是文档没有图片。
有以下方法查到资料:
1. MSDN Library->Periodicals->Periodicals 1998->Microsoft System Journal->August的"Custom Performance Monitoring for Your Windows NT Applications",和May, March的"Under the hood"。
2. www.microsoft.com/msdn
3. www.microsoft.com/msj
shuke 2000-03-05
  • 打赏
  • 举报
回复
怎么分数没给上?ft
shuke 2000-03-05
  • 打赏
  • 举报
回复
怎么删文章?嘻嘻。
shuke 2000-03-05
  • 打赏
  • 举报
回复
ft,不能给一部分分数呀。嘻嘻。
shuke 2000-03-05
  • 打赏
  • 举报
回复
谢谢。还没来得及看代码呢,不过我想按照该程序应该可行。
不过我编译HWInputMon后,运行会出错。
具体为:
Assertion Failed: prfdata.cpp 303行。
你编译运行过吗?是否有问题?
另外,我的msdn上Periodicals 1998下没有Microsoft System Journal,是否
版本有些老了?呵呵。
再次感谢。等我弄好程序,把剩下的10分加上。也许代码中有不懂的地方会继续请教。
Lin 2000-03-04
  • 打赏
  • 举报
回复
这个好象不行,哪怕在NT中我使用系统管理员注册。不过我有一个ATM(Win9x),从别处Down的,你可以参考一下。
shuke 2000-03-04
  • 打赏
  • 举报
回复
MSDN 1998年8月,5月,3月有相关文章和source code
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

从哪儿查?
GoldenLion 2000-03-04
  • 打赏
  • 举报
回复
如果是在WinNT环境上的话,可以用Performance Monitoring API.
Jeffrey Richter和Matt Pietrek 在MSDN 1998年8月,5月,3月有相关文章和source code。
shuke 2000-03-04
  • 打赏
  • 举报
回复
我用列举进程的办法实现后,可以显示出cpu的使用率。但效果不太好。从任务管理器来看,cpu使用率曲线形成锯齿状。即,定时器事件触发列举进程消耗相当大的cpu时间,然后又空闲,导致锯齿形的曲线。
有什么别的思路吗?
shuke 2000-03-03
  • 打赏
  • 举报
回复
我的意思是获得的句柄后,调用
BOOL GetProcessTimes(
HANDLE hProcess, // specifies the process of interest
LPFILETIME lpCreationTime, // when the process was created
LPFILETIME lpExitTime, // when the process exited
LPFILETIME lpKernelTime, // time the process has spent in kernel
// mode
LPFILETIME lpUserTime // time the process has spent in user mode
);
对于一些系统进程,会返回错误。
GetLastError,似乎错误代码是5。访问被拒绝。
Lin 2000-03-03
  • 打赏
  • 举报
回复
我知道怎样获得所有进程(包括Winlogo、NT的驱动程序等)的句柄,但却无法获得其CPU占用时间(进程的核心态和用户态时间,调用后总返回常值)。
所以我也想知道。

16,466

社区成员

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

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

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