想仿照windows任务管理器做一个进程的查看程序,使用listcontrol控件显示,每一秒刷新一次数据,但是控件频闪,不知道windows任务管理器是如何做的,望高手指点一下。
下面是OnTimer()里的实现。

if (nIDEvent = 1)
    {
        HANDLE hSnapshot;
        hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
        
        PROCESSENTRY32 processListStr;
        processListStr.dwSize=sizeof(PROCESSENTRY32);
        BOOL return_value;
        return_value=Process32First(hSnapshot,&processListStr);//获得系统进程链表中第一个进程的信息
        
        m_ctrAll.DeleteAllItems();
        m_ctrAll.LockWindowUpdate();
        int i=0;   //item index
        while(return_value)
        {
            m_ctrAll.InsertItem(i,processListStr.szExeFile,0);
            CString s;
            s.Format("%d",processListStr.cntThreads);
            m_ctrAll.SetItemText(i,1,s);
            s.Format("%d",processListStr.th32ParentProcessID);
            m_ctrAll.SetItemText(i,2,s);
            s.Format("%d",processListStr.pcPriClassBase);
            m_ctrAll.SetItemText(i,3,s);

//            int memory=processListStr.cntThreads;
//            m_ProcessIndex[i]=processListStr.th32ProcessID;//save ID into array to teminate 
            return_value=Process32Next(hSnapshot,&processListStr);
            //获得系统进程链表中下一个进程的信息
            i++;
        }
        
        CloseHandle(hSnapshot);
        m_ctrAll.UnlockWindowUpdate();

    }