多核CPU如何获取某个进程在各个核的使用率

gordian693 2012-01-19 03:00:48
如题:
多核CPU的机器,想获取进程A在各个核上的使用率,如果还能得到该进程哪些线程在哪个核上执行的信息那更好了?
高手们,有这样的方法吗?有好方法高分给啊
...全文
585 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dangmao 2012-02-02
  • 打赏
  • 举报
回复
学习
开发者孙小聪 2012-02-02
  • 打赏
  • 举报
回复
这个不知道了 估计windows的dll里有这个功能
sugarbelle 2012-02-02
  • 打赏
  • 举报
回复
 性能计数器:

private PerformanceCounter cpuPerformance = new PerformanceCounter();



cpuPerformance.CategoryName = "Processor";
cpuPerformance.CounterName = "% Processor Time";
cpuPerformance.InstanceName = "_Total";



double y = cpuPerformance.NextValue(); //CPU的使用率
pmaikej 2012-01-20
  • 打赏
  • 举报
回复
用API测进程在双核PC的CPU使用率

我先用WINXP自带的perfmon测一个进程的CPU使用率,这个进程的使用率有时会超过100%,因为是在双核电脑中,计数器% Processor Time是以单核的为标准。
然后我用PdhGetFormattedCounterValue还是测这个进程的CPU使用率,还是用的计数器% Processor Time,问题来了,在perfmon中显示CPU使用率超过100%的时间,我用PdhGetFormattedCounterValue测出的值却只是100%,怎么解决这个问题?不知道我把意思说清楚没有。下面是代码。

#include "stdafx.h"
#include <Pdh.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
#include <iomanip>
using namespace std;

const int SampleTime = 1000;
PDH_STATUS status;
PDH_HQUERY hQuery;
HCOUNTER *pCounterHandle;
wchar_t szPathBuffer = L"\\Processor(1)\\% Processor Time";
SYSTEMTIME szSampleTime;
DWORD ctrType;
PDH_FMT_COUNTERVALUE Value;

int _tmain(int argc, _TCHAR* argv)
{
int duration = 0;
double LastValue = 0.0;
double sum = 0.0, average = 0.0, max = 0.0;
status = PdhOpenQuery(0, 0, &hQuery);
if(status != ERROR_SUCCESS)
exit(1);
pCounterHandle = (HCOUNTER *)GlobalAlloc(GPTR, sizeof(HCOUNTER));
status = PdhAddCounter(hQuery, szPathBuffer, 0, pCounterHandle);
while (!_kbhit())
{
GetLocalTime(&szSampleTime);
status = PdhCollectQueryData(hQuery);
cout << setw(2) << setfill('0') << szSampleTime.wHour << ": "
<< setw(2) << setfill('0') << szSampleTime.wMinute << ": "
<< setw(2) << setfill('0') << szSampleTime.wSecond << " ";
status = PdhGetFormattedCounterValue (*pCounterHandle, PDH_FMT_DOUBLE, &ctrType, &Value);
if(LastValue > 0 && Value.doubleValue == 0)
{
printf("CPU Usage: %-7.3f Time: %d", Value.doubleValue, duration);
break;
}
printf("CPU Usage: %7.3f ", Value.doubleValue);
Sleep(SampleTime);
if(Value.doubleValue > 0)
{
duration++;
if(max < Value.doubleValue)
max = Value.doubleValue;
sum = sum + Value.doubleValue;
average = sum / duration;
cout << "Time: " << duration;
}
cout << endl;
LastValue = Value.doubleValue;
}
cout << endl << "Over:" << endl;
cout << "Duration: " << duration << " " << endl;
cout << "Average: " << average << " Max: " << max << endl;
status = PdhCloseQuery(hQuery);
return 0;
}


这段代码是想测一个进程在一段时间内的平均CPU使用率,所以当实际的CPU使用率超过100%,而代码中得到的值仅为100%时会导致最后结果的不准确。
blancobkoy 2012-01-19
  • 打赏
  • 举报
回复
这个有难度,没搞过,等高手来
gordian693 2012-01-19
  • 打赏
  • 举报
回复
期盼高手
gordian693 2012-01-19
  • 打赏
  • 举报
回复
自己顶一下,大家都放假了吗

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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