我想用PDH获得系统进程信息,又想做到动态的更新。
源程序伪代码为:
class CPDH
{
public:
void getdate(); //读出进程信息写到外部变量中。
private:}
源程序伪代码为:
class CPDH
{
public:
void getdate(); //读出进程信息写到外部变量中。
private:}
解决方案 »
- 如何在对话框中输出文本,求教!
- keybd_event和ASCII 的问题
- 求救:关于multicast本机发送接收udp数据
- 通过完成端口建立服务器,为什么只有一个线程比较忙?
- 关于尺寸大小改变的问题??急!
- 关于钩子(HOOK)稳定性的问题!!!毕业设计急需,谢谢,谢谢,万分感谢!!
- 各位大虾小弟问一个比较白痴的问题
- 请问如何获取用WinExec运行的Dos程序的输出。。。
- http协议//mfc类连接方式有什么不同之处?
- 怎样才能在对话框中访问视图类的数据
- vs 2003 中建立MFC项目,按下F5进行调试程序,系统出现提示:Unable to start debugging. no such interface supported.
- DIALOG mouse 移动消息(在线等待,解决还可以给分)
源程序伪代码为:
class CPDH
{
public:
void getdata(); //读出进程信息写到外部变量中。
private:
//一系列的pdh操作.被getdata调用.
}然后在另一个地方这样操作:
for(;;)
{
CPDH pdh;
pdh.getdata();
//显示操作等.
sleep(1000);//延时操作.
}
///////////////////////////////////////////////////////////
但程序却出现了这样的问题:
只能获得第一次调用getdata()时的进程信息,实在是想不明白是怎么回事,希望有经验的朋友指教。
After you finish collecting data for a query, call the PdhCloseQuery function to close the query and release all allocated system resources. PdhCloseQuery closes all counter handles associated with the query.
{
public:
void getdata(); //读出进程信息写到外部变量中。
private:
//一系列的pdh操作.被getdata调用.
public:
CPDH();
~CPDH();
private:
HQUERY m_hQuery;
}
CPDH:~CPDH()
{
PdhCloseQuery(m_hQuery);
}
///////////////////////////////////////////////////
我处理了PdhCloseQuery()的,但还是有问题。oyljerry朋友说的:“做成了循环,那就检查一下getdata()是否重复调用”具体是什么意思呢?是指其他地方又调用getdata()了吗?
为什么用PdhEnumObjectItems,获得的进程集合会一直没有变化呢?第一次函数调用获得了正确的进程集合,以后再调用它就一直获得第一次进程集合。
程序代码如下:
char cn[1024];
char in[1024];
DWORD cl=1024;
DWORD il=1024;
DWORD i,j=0;
if(PdhEnumObjectItems(NULL,hostname,"Process",cn,&cl,in,&il,PERF_DETAIL_WIZARD,0)!=ERROR_SUCCESS)
{
printf("error:%d",GetLastError());
return;
}
char strTemp[30];
for(i=0; i<il-8; i++)
{
if(in[i]!=0x0)
{
strTemp[j]=in[i];
j++;
}
else
if(strTemp[0]!=0x0)
{
printf("%s\n", strTemp);
j=0;
}
}