我想用PDH获得系统进程信息,又想做到动态的更新。
源程序伪代码为:
class CPDH
{
  public:
     void getdate(); //读出进程信息写到外部变量中。
  private:}

解决方案 »

  1.   

    我想用PDH获得系统进程信息,又想做到动态的更新。
    源程序伪代码为:
    class CPDH
    {
      public:
         void getdata(); //读出进程信息写到外部变量中。
      private:
         //一系列的pdh操作.被getdata调用.
    }然后在另一个地方这样操作:
    for(;;)
    {
       CPDH pdh;
       pdh.getdata();
       //显示操作等.
       sleep(1000);//延时操作.
    }
    ///////////////////////////////////////////////////////////
    但程序却出现了这样的问题:
        只能获得第一次调用getdata()时的进程信息,实在是想不明白是怎么回事,希望有经验的朋友指教。
      

  2.   

    Closing the Query
    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.
      

  3.   

    做成了循环,那就检查一下getdata()是否重复调用
      

  4.   

    class CPDH
    {
      public:
         void getdata(); //读出进程信息写到外部变量中。
      private:
         //一系列的pdh操作.被getdata调用.
      public:
       CPDH();
    ~CPDH();
      private:
        HQUERY m_hQuery;
         
    }
    CPDH:~CPDH()
    {
       PdhCloseQuery(m_hQuery); 
    }
    ///////////////////////////////////////////////////
    我处理了PdhCloseQuery()的,但还是有问题。oyljerry朋友说的:“做成了循环,那就检查一下getdata()是否重复调用”具体是什么意思呢?是指其他地方又调用getdata()了吗?
      

  5.   

    再请问一下:
       为什么用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;
    }
    }