首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

《系統飛狐》系列之系統監視器:基於註冊表效能計數器的即時圖表實作

     編輯:關於VC++

《系統飛狐》是一套系統優化工具,其核心模組「系統監視器」能以即時曲線呈現 CPU 使用率、核心執行緒數、磁碟快取、記憶體用量等關鍵指標。本文深入解析其在 VC++ 6.0 下、針對 Windows 9x 平台的實作原理與核心程式碼。

系統監視器介面

圖 1:系統監視器主介面

一、資料來源:HKEY_DYN_DATA\PerfStats

Windows 9x 將即時效能計數器暴露於動態註冊表鍵值 HKEY_DYN_DATA\PerfStats 下。主要包含兩個子鍵:

  • StartStat:計數器初始值(系統啟動時快照)。
  • StatData:即時計數器當前值。

透過 RegOpenKeyEx()、RegQueryValueEx() 讀取這些值,並計算差值,即可獲得各項指標的瞬間變化量。

二、核心指標擷取範例:CPU 與執行緒數

HKEY hkey;
DWORD dwDataSize = sizeof(DWORD), dwType, dwCpuUsage, dwThreadUsage;

// 1. 讀取初始值
RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\\StartStat", 0, KEY_ALL_ACCESS, &hkey);
RegQueryValueEx(hkey, "KERNEL\\CPUUsage", NULL, &dwType, (LPBYTE)&dwCpuUsage, &dwDataSize);
RegQueryValueEx(hkey, "KERNEL\\Threads", NULL, &dwType, (LPBYTE)&dwThreadUsage, &dwDataSize);
RegCloseKey(hkey);

// 2. 定時器週期性讀取即時值並計算差值
SetTimer(1, 500, NULL); // 500ms 週期

void CCpuPage::OnTimer(UINT nIDEvent) {
    RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\\StatData", 0, KEY_READ, &hkey);
    RegQueryValueEx(hkey, "KERNEL\\CPUUsage", NULL, &dwType, (LPBYTE)&dwCpuUsage, &dwDataSize);
    RegQueryValueEx(hkey, "KERNEL\\Threads", NULL, &dwType, (LPBYTE)&dwThreadUsage, &dwDataSize);
    RegCloseKey(hkey);
    // 計算差值、更新 UI...
    Invalidate(FALSE); // 觸發重繪
    CPropertyPage::OnTimer(nIDEvent);
}

三、即時曲線繪製:OnPaint 實作

使用移位陣列保存歷史數值,搭配 CPaintDC 繪製折線圖:

void CCpuPage::OnPaint() {
    CPaintDC dc(this);
    CRect rt; GetClientRect(&rt);
    
    // 歷史資料左移
    for (int i = 0; i < 49; i++) m_CPUData[i] = m_CPUData[i+1];
    m_CPUData[49] = n * 3; // 縮放適應座標
    
    // 繪製折線
    dc.MoveTo(146, 94 - m_CPUData[0]);
    for (int i = 1; i < 50; i++) {
        dc.LineTo(146 + 4.7 * i, 94 - m_CPUData[i] / 1.2);
    }
}
圖形繪製效果

圖 2:CPU 使用率即時曲線

四、其他監控指標對應表

指標註冊表路徑
CPU 使用率KERNEL\CPUUsage
核心執行緒數KERNEL\Threads
磁碟快取命中率KERNEL\DiskCache
可用記憶體KERNEL\FreeMemory
分頁檔使用量KERNEL\PageFile

五、限制與展望

  • 僅支援 Windows 9x(HKEY_DYN_DATA 為 9x 專有)。
  • NT 系作業系統需改用 PDH (Performance Data Helper) API 或 WMI 查詢效能計數器。
  • 介面繪製可進一步優化(雙緩衝、GDI+、抗鋸齒)。

六、總結

系統監視器展示了如何利用 Windows 9x 註冊表動態效能資料,配合 MFC 定時器與 GDI 繪圖,構建輕量級即時監控工具。完整原始碼已開源,歡迎改良移植至新版 Windows 平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved