既然想要让cpu占有率一直保持一定数值,就想要弄明白,cpu占用率是如何得到的
在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的洞兄时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程、系统进程等需要执行的时候,烂颤昌CPU就执行系统缺省的空闲进程。从平常的思维方式理解的话,CPU的利用率就是非空闲进程占用时间的比例,即CPU执行非空闲进程的时间/ CPU总的执行时间。
那么问题就很简单了,我饥扒们只要保持让cpu运行50,休息50就可以保证cpu的利用保持在50%了(忽略其他程序的影响)。
得到cpu占有率的API函数:
GetSystemTimes
得到内存使用情况的API函数:
GlobalMemoryStatusEx Function
Retrieves information about the system's current usage of both physical and virtual memory.
GetPerformanceInfo Function
Retrieves the performance values contained in the PERFORMANCE_INFORMATION structure
获取特定程序的内存使用情况用:
GetProcessMemoryInfo Function
Retrieves information about the memory usage of the specified process.
#define _WIN32_WINNT 0x0501
#include <Windows.h>
#include <iostream>
using namespace std
__int64 CompareFileTime ( FILETIME time1, FILETIME time2 )
{
__int64 a = time1.dwHighDateTime <<32 | time1.dwLowDateTime
__int64 b = time2.dwHighDateTime <<32 | time2.dwLowDateTime
return (b - a)
}
void main()
{
HANDLE hEvent
BOOL res
FILETIME preidleTime
FILETIME prekernelTime
FILETIME preuserTime
FILETIME idleTime
FILETIME kernelTime
FILETIME userTime
res = GetSystemTimes( &idleTime, &kernelTime, &userTime )
preidleTime = idleTime
prekernelTime = kernelTime
preuserTime = userTime
hEvent = CreateEvent (NULL,FALSE,FALSE,NULL)// 初始值扮滑为 nonsignaled ,并且每次触发后自动设置为nonsignaled
while (1){
WaitForSingleObject( hEvent,1000 )//等待500毫秒
res = GetSystemTimes( &idleTime, &kernelTime, &userTime )
int idle = CompareFileTime( preidleTime,idleTime)
int kernel = CompareFileTime( prekernelTime, kernelTime)
int user = CompareFileTime(preuserTime, userTime)
int cpu = (kernel +user - idle) *100/(kernel+user)
int cpuidle = ( idle) *100/(kernel+user)
cout <<"CPU利厅轮腊用率:" <<cpu <<"%" <<" CPU空闲桐败率:" <<cpuidle <<"%" <<endl
preidleTime = idleTime
prekernelTime = kernelTime
preuserTime = userTime
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)