资源简介

遇到需求写的代码,没那么正规,但也请你尊重作者 C/C++实现linux和Windows查看系统、进程、服务的内存和CPU使用情况的源代码,生成的是静态链接库,Windows和Linux下经测试都可用,查看系统、指定名称的服务、指定名称的进程占用CPU和内存,查看方式不是通过程序中运行命令行的方式,而是采用系统提供的接口去查看内核状态 在开发中遇到需要查看这些信息的朋友可以去使用 如有疑问或好的建议请发送邮件至lion_liu_0301@163.com

资源截图

代码片段和文件信息

#include “CheckProcessCpu.h“
#include 
#include 

#ifdef WIN32
#include 
#include 
#include 

#define MY_PROCESS_ERROR(Condition) do{ if (!(Condition))  goto Exit0; } while (false)

static DWORD g_sdwTickCountOld = 0;             // ??һ?ε?tick????
static LARGE_INTEGER g_slgProcessTimeOld;       // ??????????һ?ε?ʱ??ռ??
static DWORD g_sdwProcessorCoreNum = 0;         // ????????????
static HANDLE g_shExitEvent = NULL;             // ?߳??˳?????

int GetProcessCpuPercent(const HANDLE hProcess const DWORD dwElepsedTime)
{
int nProcCpuPercent = 0;
BOOL bRetCode = FALSE;

FILETIME CreateTime ExitTime KernelTimeUserTime;
LARGE_INTEGER lgKernelTime;
LARGE_INTEGER lgUserTime;
LARGE_INTEGER lgCurTime;

bRetCode = GetProcessTimes(hProcess &CreateTime &ExitTime &KernelTime &UserTime);
if (bRetCode)
{
lgKernelTime.HighPart = KernelTime.dwHighDateTime;
lgKernelTime.LowPart = KernelTime.dwLowDateTime;

lgUserTime.HighPart = UserTime.dwHighDateTime;
lgUserTime.LowPart = UserTime.dwLowDateTime;

lgCurTime.QuadPart = (lgKernelTime.QuadPart + lgUserTime.QuadPart) / 10000;
nProcCpuPercent = (int)((lgCurTime.QuadPart - g_slgProcessTimeOld.QuadPart) * 100 / dwElepsedTime);
g_slgProcessTimeOld = lgCurTime;
nProcCpuPercent = nProcCpuPercent / g_sdwProcessorCoreNum;
}
else
{
nProcCpuPercent = -1;
}

return nProcCpuPercent;
}

unsigned int BeforeProcIDCpuPercent(DWORD ProcessID)
{
HRESULT hr = E_FAIL;

HANDLE hProcess = NULL;
DWORD dwProcessId = ProcessID;
DWORD dwRetVal = 0;
DWORD dwCurrentTickCount = 0;
DWORD dwElapsedTime = 0;
int nProcessCpuPercent = 0;

//TARGET_PROCESS *pTargetProcess = (TARGET_PROCESS *)pArg;

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION  FALSE dwProcessId);
MY_PROCESS_ERROR(hProcess);

dwRetVal = WaitForSingleobject(g_shExitEvent 200);
dwCurrentTickCount = GetTickCount();
dwElapsedTime = dwCurrentTickCount - g_sdwTickCountOld;
g_sdwTickCountOld = dwCurrentTickCount;
nProcessCpuPercent = GetProcessCpuPercent(hProcess dwElapsedTime);

dwRetVal = WaitForSingleobject(g_shExitEvent 200);
if (WAIT_object_0 == dwRetVal ||
WAIT_FAILED == dwRetVal

{
goto Exit0;
}

dwCurrentTickCount = GetTickCount();
dwElapsedTime = dwCurrentTickCount - g_sdwTickCountOld;
g_sdwTickCountOld = dwCurrentTickCount;
nProcessCpuPercent = GetProcessCpuPercent(hProcess dwElapsedTime);
return nProcessCpuPercent;

Exit0:
if (hProcess)
{
CloseHandle(hProcess);
hProcess = NULL;
}

return -1;
}

unsigned int ProcIDCpuPercent(DWORD ProcessID)
{
SYSTEM_INFO sysInfo = { 0 };
GetSystemInfo(&sysInfo);
g_sdwProcessorCoreNum = sysInfo.dwNumberOfProcessors;

g_shExitEvent = CreateEvent(NULL TRUE FALSE NULL);
if (!g_shExitEvent)
{
CloseHandle(g_shExitEvent);
g_shExitEvent = NULL;
return -1;
}
return BeforeProcIDCpuPercent(ProcessID);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-08-21 15:12  CheckSysProcSrvStat\
     文件        5822  2014-08-11 14:54  CheckSysProcSrvStat\CheckProcessCpu.cpp
     文件         572  2014-08-07 17:13  CheckSysProcSrvStat\CheckProcessCpu.h
     文件        3871  2014-08-11 15:01  CheckSysProcSrvStat\CheckProcessMem.cpp
     文件         244  2014-08-11 14:54  CheckSysProcSrvStat\CheckProcessMem.h
     文件        3147  2014-08-12 09:43  CheckSysProcSrvStat\CheckProcessStat.cpp
     文件        1613  2014-08-11 16:54  CheckSysProcSrvStat\CheckProcessStat.h
     文件        4019  2014-08-11 14:54  CheckSysProcSrvStat\CheckSysStat.cpp
     文件        1107  2014-08-11 14:54  CheckSysProcSrvStat\CheckSysStat.h
     文件        5778  2014-08-06 17:42  CheckSysProcSrvStat\IsProcORSrvRun.cpp
     文件         459  2014-08-06 17:41  CheckSysProcSrvStat\IsProcORSrvRun.h
     文件         295  2014-08-11 15:12  CheckSysProcSrvStat\Makefile
     文件        4411  2014-08-12 09:36  CheckSysProcSrvStat\libhatools.vcproj
     文件        4388  2014-08-11 17:45  CheckSysProcSrvStat\libhatools.vcxproj
     文件         213  2014-08-05 15:59  CheckSysProcSrvStat\stdafx.cpp
     文件         277  2014-08-06 15:40  CheckSysProcSrvStat\stdafx.h
     文件         256  2014-08-06 15:40  CheckSysProcSrvStat\targetver.h

评论

共有 条评论