我想用PDH获得系统进程信息,又想做到动态的更新。
源程序伪代码为:
class CPDH
{
public:
void getdate(); //读出进程信息写到外部变量中。
private:}
源程序伪代码为:
class CPDH
{
public:
void getdate(); //读出进程信息写到外部变量中。
private:}
解决方案 »
- 用SerialPort类写串口通信接收到乱码
- ADO连接出现“无效指针”
- VC连ACCESS时,出错
- FindNextFile不按文件名排序的问题
- 字符串处理
- 进程取参数问题 - 参数设置文件config.ini 只有一个
- 如何得到一个指向非active 的view 的指针呢?
- 用 RoundRect 畫出 FLATSLUR 平頂弧線
- 请教:线程切换的问题
- 关于VC2012MFC滚动条问题,为什么滚动条滚回去之后不能正常显示了?
- 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;
}
}