win2000下如何获取CPU的占有率

bluestar 2001-08-15 05:49:59
我用的是WIN2000+SP2,如何用VC编程获取CPU的占有率?
...全文
113 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengyun_ustc 2002-05-30
  • 打赏
  • 举报
回复
怎么没有人回答呀?
如果是我要想得到这个数,我第一个想到的就是WMI编程。这个最简单了,我会写一个vbs脚本,其内容为:
Option Explicit

Dim objWbem
Dim colProcessors
Dim objProcessor

Set objWbem = GetObject("winmgmts:")
Set colProcessors = objWbem.InstancesOf("Win32_Processor")

For Each objProcessor In colProcessors
WScript.Echo "Load capacity of each processor, averaged over the last second:" & _
VbCrLf & objProcessor.LoadPercentage & "%"
Next

但是用VC写出上面同样效果的代码,就比较麻烦了。

那我就会选择这么做(参见Platform SDK: Performance Monitoring),用微软提供的Performance Monitoring Function,就可以想得到什么就能够得到什么了,用C写起来也方便多了。下面就是代码:

#define UNICODE
#define _UNICODE

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <pdh.h>
#include <pdhmsg.h>

void
DisplayCommandLineHelp ()
{
_tprintf (TEXT("\n\nOne or more valid log names must be"));
_tprintf (TEXT("specified as a command line argument. The"));
_tprintf (TEXT("\nlog file will be in the CSV log file format."));
return;
}

int __cdecl _tmain (int argc, TCHAR **argv)
{

HQUERY hQuery;
HLOG hLog;
PDH_STATUS pdhStatus;
DWORD dwLogType = PDH_LOG_TYPE_CSV;
HCOUNTER hCounter;
CHAR szCounterPath[45] =
"\\Processor(0)\\% Processor Time";
DWORD dwCount;

if (argc != 2) {
DisplayCommandLineHelp ();
return -1;
}

// Open a query object.
pdhStatus = PdhOpenQuery (0,
0,
&hQuery);

// Add one counter that will provide the data.
pdhStatus = PdhAddCounter (hQuery,
(LPCTSTR)szCounterPath,
0,
&hCounter);

// Open the log file for write access.
pdhStatus = PdhOpenLog (argv[1],
PDH_LOG_WRITE_ACCESS |
PDH_LOG_CREATE_ALWAYS,
&dwLogType,
hQuery,
0,
NULL,
&hLog);

// Write 50 records to the log file.
for (dwCount = 0; dwCount <= 50; dwCount++) {
pdhStatus = PdhUpdateLog (hLog, TEXT("This is a comment."));
Sleep(1000); // Wait one second between samples for
// the counter to be updated.
}

// Close the query object.
pdhStatus = PdhCloseQuery (hQuery);

// Close the log file.
pdhStatus = PdhCloseLog (hLog,
PDH_FLAGS_CLOSE_QUERY);

return 0;
}
BlueTrees 2002-05-28
  • 打赏
  • 举报
回复
up
bluestar 2001-08-16
  • 打赏
  • 举报
回复
up
Luck04 2001-08-15
  • 打赏
  • 举报
回复
gz
bluestar 2001-08-15
  • 打赏
  • 举报
回复
system下面东西多多,具体是哪一个?
lbqsv 2001-08-15
  • 打赏
  • 举报
回复
这个东东也可以 Performance Monitoring
lbqsv 2001-08-15
  • 打赏
  • 举报
回复
BOOL GetProcessTimes(
HANDLE hProcess, // handle to process
LPFILETIME lpCreationTime, // process creation time
LPFILETIME lpExitTime, // process exit time
LPFILETIME lpKernelTime, // process kernel-mode time
LPFILETIME lpUserTime // process user-mode time
);
panda_w 2001-08-15
  • 打赏
  • 举报
回复
CPU的占有率应该通过读取注册表可以得到,找一下这个下面分析:HKEY_LOCAL_MACHINE\SYSTEM
zhengyun_ustc 2001-08-15
  • 打赏
  • 举报
回复
up...............

16,472

社区成员

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

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

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