typedef struct _THREAD_INFO
{
LARGE_INTEGER CreateTime;
DWORD dwUnknown1;
DWORD dwStartAddress;
DWORD StartEIP;
DWORD dwOwnerPID;
DWORD dwThreadId;
DWORD dwCurrentPriority;
DWORD dwBasePriority;
DWORD dwContextSwitches;
DWORD Unknown;
DWORD WaitReason;
}THREADINFO, *PTHREADINFO;
typedef struct _UNICODE_STRING
{
USHORT Length;
USHORT MaxLength;
PWSTR Buffer;
} UNICODE_STRING;
typedef struct _PROCESS_INFO
{
DWORD dwOffset;
DWORD dwThreadsCount;
DWORD dwUnused1[6];
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ProcessName;
DWORD dwBasePriority;
DWORD dwProcessID;
DWORD dwParentProcessId;
DWORD dwHandleCount;
DWORD dwUnused3[2];
DWORD dwVirtualBytesPeak;
DWORD dwVirtualBytes;
ULONG dwPageFaults;
DWORD dwWorkingSetPeak;
DWORD dwWorkingSet;
DWORD dwQuotaPeakPagedPoolUsage;
DWORD dwQuotaPagedPoolUsage;
DWORD dwQuotaPeakNonPagedPoolUsage;
DWORD dwQuotaNonPagedPoolUsage;
DWORD dwPageFileUsage;
DWORD dwPageFileUsagePeak;
DWORD dCommitCharge;
THREADINFO ThreadSysInfo[1];
} PROCESSINFO, *PPROCESSINFO;
//每秒钟查询一次
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Button2Click(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PVOID pProcInfo = NULL;
DWORD dwInfoSize = 0x20000;
PPROCESSINFO pProcessInfo;
DWORD dwWorkingSet;
long ( __stdcall *NtQuerySystemInformation )( DWORD, PVOID, DWORD, DWORD );
static __int64 LastTotalProcessCPUUsage = 0;
static __int64 LastCurrentProcessCPUUsage = 0;
int CurrentDelta;
int TotalDelta;
__int64 TotalProcessCPUUsage = 0;
__int64 CurrentProcessCPUUsage = 0;
/////////////////////////////////
pProcInfo = (PVOID)(new byte[dwInfoSize]);
NtQuerySystemInformation = (long(__stdcall*)(DWORD,PVOID,DWORD,DWORD))
GetProcAddress( GetModuleHandle( "ntdll.dll" ),"NtQuerySystemInformation" );
NtQuerySystemInformation(5,pProcInfo,dwInfoSize,0);
pProcessInfo = (PPROCESSINFO)pProcInfo;
do
{
TotalProcessCPUUsage += (__int64)pProcessInfo->KernelTime.QuadPart + (__int64)pProcessInfo->UserTime.QuadPart;
if(pProcessInfo->dwProcessID == GetCurrentProcessId())
{
dwWorkingSet = pProcessInfo->dwWorkingSet;
CurrentProcessCPUUsage += (__int64)pProcessInfo->KernelTime.QuadPart + (__int64)pProcessInfo->UserTime.QuadPart;
}
/////////
if(pProcessInfo->dwOffset == 0)
{
break;
}
pProcessInfo = (PPROCESSINFO)((byte*)pProcessInfo + pProcessInfo->dwOffset);
}
while(true);
TotalDelta = TotalProcessCPUUsage - LastTotalProcessCPUUsage;
CurrentDelta = CurrentProcessCPUUsage - LastCurrentProcessCPUUsage;
if(TotalDelta != 0)
this->Caption = "CPU = " + IntToStr(100 * CurrentDelta / TotalDelta) +
"Memory = "+ IntToStr(dwWorkingSet / 1024) " K";
LastTotalProcessCPUUsage = TotalProcessCPUUsage;
LastCurrentProcessCPUUsage = CurrentProcessCPUUsage;
delete[] pProcInfo;
}
不知道你找到的是不是这个代码。这个程序是查寻自身CPU占用的,但其实他有能力查询所有的程序,请注意if(pProcessInfo->dwProcessID == GetCurrentProcessId())这个地方。
要说CPU占用率,其实就是NtQuerySystemInformation查询,没什么关键的地方。
分享到:
相关推荐
"Delphi CPU占用率"这个话题正是关注这样一个关键指标:一个由Delphi编写的程序在运行时如何影响系统的中央处理器(CPU)资源。Delphi是一种强大的对象 Pascal 编程语言和集成开发环境(IDE),用于构建高性能的...
在Linux操作系统中,掌握如何查看进程的CPU占用率是系统管理员和开发者必备的技能之一。这一过程涉及到对系统监控工具的使用,理解进程与CPU之间的交互,以及如何解析输出信息。下面将详细介绍如何在Linux环境下查看...
例如,如果某个系统服务(如svchost.exe)配置错误或者资源分配不合理,就可能导致CPU占用率异常增加。可以通过修改注册表中的相关设置来优化系统配置。 #### 六、网络共享服务引起的高CPU占用 Windows系统中的...
正常的CPU占用率通常在5%到50%之间,但如果长时间处于80%以上,可能会影响系统性能,导致程序运行缓慢或者卡顿。 在提供的压缩包文件名称列表中: 1. "jb51.net.txt":可能包含来自jb51.net(一个技术分享网站)的...
总之,通过Windows API,VC++开发者可以轻松地获取和监控进程的CPU占用率和内存使用情况,这对于优化程序性能、排查问题或者构建系统监控工具都是非常有用的。在实际编程中,需要注意线程安全、资源释放以及错误处理...
7. **安全性和稳定性**: 高CPU占用率有时可能是恶意软件或病毒的迹象,因此持续监控CPU占用率是保持系统安全和稳定的一部分。通过及时发现并处理异常进程,可以防止系统被破坏或性能受到严重影响。 总的来说,了解...
标题中的“CPU占用率监控程序”是指一个软件应用,其主要功能是实时监测计算机中某个特定进程的CPU使用情况。这种程序对于系统管理员或者开发者来说非常有用,因为高CPU占用可能导致系统性能下降、响应变慢,甚至...
在IT领域,优化CPU占用率是一项重要的任务,特别是在服务器管理和应用程序性能调优中。本文将深入探讨如何控制CPU的占用率,并提供相关的源码和工具分析。首先,我们需要理解CPU占用率的概念及其影响因素。 CPU占用...
在这个特定的项目中,我们关注的是一个使用C# .NET编写的守护程序,其核心功能是进行CPU占用率检测并能自动重启指定进程。以下是对这些知识点的详细解释: 1. **C# .NET编程**:C#是一种面向对象的编程语言,由微软...
- **排除系统级问题**:虽然移除了恶意软件,但CPU占用率仍然偏高,这提示问题可能不是单纯由操作系统引起,而是转移到了应用程序层面上。 #### 三、深入分析与解决 - **锁定应用层面问题**:通过暂停所有访问...
"显示某进程的CPU占用率"这一操作可以帮助我们了解系统性能,诊断可能存在的性能瓶颈,或者检测是否有恶意程序在过度消耗资源。下面将详细介绍如何在不同的操作系统环境下查看进程的CPU占用率。 在Windows系统中,...
解析交换机CPU占用率是指一段时间内CPU执行代码的非空闲时间与时间段总长度的比率,可以反映某个时间段交换机CPU资源使用情况,其计算机公式为:CPU占用率:(总时间-空闲时间)/总时间。空闲时间是指CPU运行Idle任务...
除了查看内存占用率外,了解 CPU 占用率也是很重要的。可以通过使用 `print` 和 `awk` 命令的组合来获取 CPU 的占用率。 1. **使用 `top` 命令**:`top` 命令提供了实时更新的系统监控信息,包括 CPU 使用情况。...
本文将详细介绍如何通过`/proc`文件系统来获取特定进程的CPU占用率,并提供一个简单的示例程序,帮助读者理解和实践这一过程。 #### 一、`/proc`文件系统简介 `/proc`是一个特殊的文件系统,用于提供当前运行中的...
在Windows默认的任务管理器中,我们只能看到各个进程的CPU占用率,而无法直接获取到线程级别的详细信息。而ProcessExplorer的独特之处在于,它可以显示每个进程内部线程的CPU使用情况,这对于排查高CPU占用问题或者...
可以查看当前系统运行的各进程cpu占用率 在CSDN上找到两个都不太好用,自己写了一个VS2013环境下编译通过 也可以直接运行\bin\Debug目录下的ConsoleApplication1.exe文件 用途:查看自己写的程序那个线程运行时间...
了解CPU使用率可以帮助我们分析系统是否过载,是否存在资源争抢,或者程序是否运行得过于消耗CPU。 易语言提供了一系列的系统调用来获取系统信息,包括CPU使用率。在易语言中,通过调用“系统信息.取CPU使用率”...
CPU占用率100%意味着CPU正在满负荷运行,无法接受新的任务请求,这通常是由一个或多个程序占用大量计算资源造成的。 #### 二、常见原因分析 1. **恶意软件**:病毒、木马等恶意软件常常会在后台执行高负载操作,...
如果CPU占用率过高是由某个恶意软件或驱动程序引起的,可以尝试重启电脑并进入安全模式。安全模式会禁用所有非必要的驱动程序和服务,从而避免潜在的问题源。在安全模式下,检查系统日志,查找异常记录,或使用杀毒...
首先,我们需要理解CPU占用率高的可能原因。这可能由以下几种情况引起: 1. **代码执行效率低**:如果应用中存在大量的循环计算、递归调用或无谓的资源消耗,如未优化的数据库查询,都可能导致CPU负载增加。 2. **...