在windows下, 怎么获得一个进程占用多少内存, 含有多少线程?

Sylix 2004-03-26 12:51:46
在windows下, 怎么获得一个进程占用多少内存, 含有多少线程?
...全文
159 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sylix 2004-03-26
  • 打赏
  • 举报
回复
哪位高手能指教一下?
wythust 2004-03-26
  • 打赏
  • 举报
回复
// PView.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include <string>
#include <iomanip>
#include <iostream>
#include <windows.h>
#include <Winternl.h>

using namespace std;

#define QWORD __int64

bool FetchSystemTimes(QWORD& sysTime);


QWORD ProcessTime;
QWORD SysTime;

int _tmain(int argc, _TCHAR* argv[])
{

FILETIME creationTime; //进程建立时间
FILETIME exitTime; //进程退出时间
FILETIME kernelTime; //进程内核模式时间
FILETIME userTime; //进程用户模式时间

FLOAT processCpuUsage = 0.0F;

if (argc == 1)
{
cout << "pview ProcessID";
exit(0);
}

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,atol(argv[1]));
if (hProcess == NULL)
{
cout << "Please input a valid Process ID";
exit(0);
}

QWORD sysTime = 0; //进程空闲时间
for(;;)
{
FetchSystemTimes(sysTime);
GetProcessTimes(hProcess,&creationTime,&exitTime,&kernelTime,&userTime);
QWORD cpuUsage = (userTime.dwLowDateTime + (userTime.dwHighDateTime << 32))
+ (kernelTime.dwLowDateTime + (kernelTime.dwHighDateTime << 32));
QWORD idleTime = (sysTime / 100);

processCpuUsage = static_cast<FLOAT>(cpuUsage - ProcessTime)
/ static_cast<FLOAT>(idleTime - SysTime);

ProcessTime = cpuUsage;
SysTime = idleTime;
cout << setw(15); //设置输出格式
cout << setprecision(10);
cout << setiosflags(ios::showpoint);
cout << setiosflags(ios::fixed);
cout << processCpuUsage;
cout << "\n";
Sleep(100);
}




return 0;
}

// 获取系统的内核/用户以及空闲时间
bool FetchSystemTimes(QWORD& sysTime)
{
typedef struct _SYSTEM_TIME_INFORMATION
{
LARGE_INTEGER liKeBootTime;
LARGE_INTEGER liKeSystemTime;
LARGE_INTEGER liExpTimeZoneBias;
ULONG uCurrentTimeZoneId;
DWORD dwReserved;
} SYSTEM_TIME_INFORMATION;

SYSTEM_TIME_INFORMATION sysTimeInfo;

typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);
PROCNTQSI NtSystemInfo;
NtSystemInfo = (PROCNTQSI)GetProcAddress
(GetModuleHandle("ntdll"),"NtQuerySystemInformation");

NtSystemInfo(3,&sysTimeInfo,sizeof(sysTimeInfo),NULL);
sysTime = sysTimeInfo.liKeSystemTime.QuadPart;

return false;
}

刚才看到的一个贴子,借花献佛,希望对楼主有用

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧