以下是使用 C++ 编写检测 Windows 系统下进程 CPU 跟内存占用并打印出带时间戳的表格数据的示例代码:

#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
#include <iomanip>
#include <ctime>

using namespace std;

void printProcessInfo(DWORD processID) {
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
    if (hProcess == NULL) {
        cerr << 'Failed to open process ' << processID << endl;
        return;
    }

    PROCESS_MEMORY_COUNTERS_EX pmc;
    if (GetProcessMemoryInfo(hProcess, (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc))) {
        cout << setw(10) << processID << setw(15) << pmc.WorkingSetSize / 1024 << ' KB' << setw(15) << pmc.PrivateUsage / 1024 << ' KB';
    }
    else {
        cerr << 'Failed to retrieve memory info for process ' << processID << endl;
    }

    FILETIME createTime, exitTime, kernelTime, userTime;
    if (GetProcessTimes(hProcess, &createTime, &exitTime, &kernelTime, &userTime)) {
        ULARGE_INTEGER ulKernelTime, ulUserTime;
        ulKernelTime.LowPart = kernelTime.dwLowDateTime;
        ulKernelTime.HighPart = kernelTime.dwHighDateTime;
        ulUserTime.LowPart = userTime.dwLowDateTime;
        ulUserTime.HighPart = userTime.dwHighDateTime;

        ULONGLONG kernelTimeMs = ulKernelTime.QuadPart / (10 * 1000); // convert to milliseconds
        ULONGLONG userTimeMs = ulUserTime.QuadPart / (10 * 1000); // convert to milliseconds
        cout << setw(15) << kernelTimeMs << ' ms' << setw(15) << userTimeMs << ' ms';
    }
    else {
        cerr << 'Failed to retrieve CPU time for process ' << processID << endl;
    }

    CloseHandle(hProcess);
}

int main() {
    const int pid = 1234; // replace with the process ID you want to monitor

    cout << setw(10) << 'PID' << setw(15) << 'Working Set' << setw(15) << 'Private Bytes' << setw(15) << 'Kernel Time' << setw(15) << 'User Time' << endl;

    while (true) {
        SYSTEMTIME time;
        GetLocalTime(&time);
        cout << setfill('0') << setw(2) << time.wHour << ':' << setw(2) << time.wMinute << ':' << setw(2) << time.wSecond << '.' << setw(3) << time.wMilliseconds << ' ';
        printProcessInfo(pid);
        cout << endl;
        Sleep(1000); // wait for 1 second
    }

    return 0;
}

说明:

  1. printProcessInfo 函数用于打印给定进程的内存占用和 CPU 时间占用;
  2. main 函数中使用 GetLocalTime 函数获取当前时间,然后调用 printProcessInfo 函数打印指定进程的信息,并等待 1 秒钟再继续循环;
  3. 在输出表格数据时使用了一些格式化控制符,例如 setw 用于设置字段宽度,setfill 用于设置空白填充字符;
  4. 该示例代码中只监测了一个进程,如果需要监测多个进程,可以将 pid 变量改为一个数组,然后在循环中遍历数组并调用 printProcessInfo 函数。
C++ 获取 Windows 进程 CPU 和内存占用并打印表格数据

原文地址: https://www.cveoy.top/t/topic/n7mn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录