学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)

时间:2022-04-30 14:26:35
题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:

1. CPU的占用率固定在50%,为一条直线;

2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);

3. CPU的占用率状态是一个正弦曲线。

 

完整代码如下:

学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)#include<windows.h>
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)#include
<cstdio>
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)#include
<cmath>
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
constint PERIOD= 60* 1000;//60,000 ms
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
constint COUNT = 200;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
constdouble PI = 3.1415926535898;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
constdouble GAP= (double)PERIOD/ COUNT;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
constdouble FACTOR= 2* PI / PERIOD;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)typedef
double Func(double);
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)inlineDWORD get_time()
{ returnGetTickCount(); }
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
doublecalc2(doublex) { return(1 +sin(FACTOR *x)) / 2;}
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
doublecalc3(double)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
{
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
static doublecache[COUNT];
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
static intcount = 0;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
static boolfirst = true;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
if (first) {
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
doublex = 0.0;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
for(int i = 0;i <COUNT; ++i,x +=GAP)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)cache[i]
=(1.0 +sin(FACTOR *x)) / 2.0;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)first
= false;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)}

学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
if (count >=COUNT) count = 0;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
returncache[count++];
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)}

学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
doublecalc4(double){ return0.8;}
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
voidsolve(Func *calc)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
{
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
doubletb = 0;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
while(1){
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)unsigned ta
=get_time();
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
doubler =calc(tb);
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
if(r < 0|| r > 1)r = 1;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)DWORD busy
=r *GAP;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
while(get_time()- ta < busy) {}
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)Sleep(GAP
-busy);
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)tb
+=GAP;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)}

学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)}

学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
voidrun()
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
{
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)Func
*func[]= {calc2, calc3, calc4 };
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)Func
*calc= func[1];
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
const intMAX_CPUS = 32;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)HANDLE handle[MAX_CPUS];
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)DWORD thread_id[MAX_CPUS];
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)SYSTEM_INFO info;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)GetSystemInfo(
&info);
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
const intnum =info.dwNumberOfProcessors;
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
for(int i = 0;i <num; ++i){
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
if( (handle[i] =CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)solve,
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)(VOID
*)calc,0, &thread_id[i]))!= NULL)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)SetThreadAffinityMask(handle[i], i
+1);
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)}

学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)WaitForSingleObject(handle[
0],INFINITE);
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)}

学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
intmain()
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)
{
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)run();
学科前沿技术(让用户来决定Windows任务管理器的CPU占用率)}