c语言实时获取windows下读写速率

好的呢 2017-12-01 09:23:14
// 磁盘.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#pragma comment(lib,"pdh")
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>
#include <pdh.h>
#include <pdhmsg.h>
#include <tchar.h>
#include <windows.h>

int nCPU;

int GetData()
{
HQUERY query;
double dbVal;
long iVal;
PDH_STATUS status = PdhOpenQuery(NULL, NULL, &query);
if (ERROR_SUCCESS != status)
{
MessageBox(NULL, TEXT("打开失败"), TEXT(""), MB_OK);
return -1;

}

HCOUNTER cntProcessCPU, cntProcessMemory;
HCOUNTER cntProcessDiskRead, cntProcessDiskWrite;
status = PdhAddCounterA(query, "\\Process(tfb_manage_system)\\% Processor Time", NULL, &cntProcessCPU);
status = PdhAddCounterA(query, "\\Process(tfb_manage_system)\\Working Set - Private", NULL, &cntProcessMemory);
status = PdhAddCounterA(query, "\\Process(tfb_manage_system)\\IO Read Bytes/sec", NULL, &cntProcessDiskRead);
status = PdhAddCounterA(query, "\\Process(tfb_manage_system)\\IO Write Bytes/sec", NULL, &cntProcessDiskWrite);
if (ERROR_SUCCESS != status)
{
MessageBox(NULL, TEXT("添加失败"), TEXT(""), MB_OK);
return -1;

}

status = PdhCollectQueryData(query);
Sleep(500); //这里要有延时不然结果相当不准确
status = PdhCollectQueryData(query);
if (ERROR_SUCCESS != status)
{
MessageBox(NULL, TEXT("数据请求失败"), TEXT(""), MB_OK);
return -1;
}
printf("=====");
PDH_FMT_COUNTERVALUE pdhValue;
DWORD dwValue;

status = PdhGetFormattedCounterValue(cntProcessCPU, PDH_FMT_DOUBLE, &dwValue, &pdhValue);
if (ERROR_SUCCESS != status)
{
MessageBox(NULL, TEXT("得到数据失败"), TEXT(""), MB_OK);
return -1;
}
else
{
dbVal = pdhValue.doubleValue;
printf("Process-CPU: %3d%% ", (int)(dbVal / nCPU + 0.5));
}

status = PdhGetFormattedCounterValue(cntProcessMemory, PDH_FMT_DOUBLE, &dwValue, &pdhValue);
if (ERROR_SUCCESS != status)
{
MessageBox(NULL, TEXT("得到数据失败"), TEXT(""), MB_OK);
return -1;
}
else
{
dbVal = pdhValue.doubleValue;
printf("Process-Memory: %8dK \n", (int)(dbVal / 1024));
}

status = PdhGetFormattedCounterValue(cntProcessDiskRead, PDH_FMT_DOUBLE, &dwValue, &pdhValue);
if (ERROR_SUCCESS != status)
{
MessageBox(NULL, TEXT("得到数据失败"), TEXT(""), MB_OK);
return -1;
}
else
{
dbVal = pdhValue.doubleValue;
printf("Process-DiskRead:%8dK/s ", (int)(dbVal / 1024));
}

status = PdhGetFormattedCounterValue(cntProcessDiskWrite, PDH_FMT_DOUBLE, &dwValue, &pdhValue);
if (ERROR_SUCCESS != status)
{
MessageBox(NULL, TEXT("得到数据失败"), TEXT(""), MB_OK);
return -1;
}
else
{
dbVal = pdhValue.doubleValue;
printf("Process-DiskWrite:%8dK/s \n*****************************************************************************\n", (int)(dbVal / 1024));
}

PdhRemoveCounter(cntProcessCPU);
PdhRemoveCounter(cntProcessMemory);
PdhRemoveCounter(cntProcessDiskRead);
PdhRemoveCounter(cntProcessDiskWrite);
PdhCloseQuery(query);
}


int main() {
setlocale(LC_ALL, "chs");

SYSTEM_INFO si;
GetSystemInfo(&si);
nCPU = si.dwNumberOfProcessors;

while (1)
{
Sleep(500);
GetData();
}
system("pause");
return 0;
}
运行就会提示数据请求失败,好像错误是PDH_NO_DATA,在msdn上别人说“solved - wrong instance @ pdhaddcounter”,具体应该怎么解决呢,各位大佬们?
...全文
415 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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