/*
#include "Windows.h"
#include "stdlib.h"
#include "math.h"
const double SPLIT = 0.01;
const int COUNT = 2000;
const double PI = 3.14159265;
const int INTERVAL = 100; //每个抽样点对应的时间片
//程序中的INTERVAL 参数决定了正弦曲线的周期,INTERVAL越大正弦曲
// 线的周期越大,上图是在INTERVALL = 100时的运行效果。SPLIT 决定了正弦曲线的平滑程度,可以手动测试出比较理想的值。
int main(int argc, CHAR* argv[])
{
SetThreadAffinityMask(GetCurrentThread(), 1);
DWORD busySpan[COUNT]; //array of busy times
DWORD idleSpan[COUNT]; //array of idle times
int half = INTERVAL / 2;
double radian = 0.0;
for(int i = 0; i < COUNT; i++)
{
busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));
idleSpan[i] = INTERVAL - busySpan[i];
radian += SPLIT;
}
DWORD startTime = 0;
int j = 0;
while (true)
{
j = j % COUNT;
startTime = GetTickCount();
while ((GetTickCount() - startTime) <= busySpan[j]) ;
Sleep(idleSpan[j]);
//为甚么会显示正弦,因为无论怎么分配时间片,在300ms内执行的时间占总的时间的比例是不变的,这正是cpu利用率的定义
j++;
}
return 0;
}
*/
/*
#include "Windows.h"
#include "stdlib.h"
#include "math.h"
const double SPLIT = 0.01;
const int COUNT = 200;
const double PI = 3.14159265;
const int INTERVAL = 300;
int main(int argc, CHAR* argv[])
{
SetProcessAffinityMask(
GetCurrentProcess(),
0x00000001 //cpu mask
);
DWORD busySpan[COUNT]; //array of busy times
DWORD idleSpan[COUNT]; //array of idle times
int half = INTERVAL / 2;
double radian = 0.0;
for(int i = 0; i < COUNT; i++)
{
busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));
idleSpan[i] = INTERVAL - busySpan[i];
radian += SPLIT;
}
DWORD startTime = 0;
int j = 0;
while (true)
{
j = j % COUNT;
startTime = GetTickCount();
while ((GetTickCount() - startTime) <= busySpan[j]) ;
Sleep(idleSpan[j]);
j++;
}
return 0;
}
*/
/*
#include <windows.h>
const DWORD busyTime = 10;
const DWORD idleTime = 10;
int main()
{
for(;;)
{
DWORD startTime = GetTickCount();
while(GetTickCount()-startTime<=busyTime)
;
Sleep(idleTime);
}
return 0;
}*/
#include <Windows.h>
int main()
{
int busyTime = 300; // 10 ms
int idleTime = busyTime;
DWORD startTime = 0;
SetProcessAffinityMask(
GetCurrentProcess(),
0x00000001 //cpu mask
);
while(true)
{
startTime = GetTickCount();
// busy loop
while((GetTickCount()- startTime) <= busyTime);
// idle loop
Sleep(idleTime);
}
return 0;
}
#include "Windows.h"
#include "stdlib.h"
#include "math.h"
const double SPLIT = 0.01;
const int COUNT = 2000;
const double PI = 3.14159265;
const int INTERVAL = 100; //每个抽样点对应的时间片
//程序中的INTERVAL 参数决定了正弦曲线的周期,INTERVAL越大正弦曲
// 线的周期越大,上图是在INTERVALL = 100时的运行效果。SPLIT 决定了正弦曲线的平滑程度,可以手动测试出比较理想的值。
int main(int argc, CHAR* argv[])
{
SetThreadAffinityMask(GetCurrentThread(), 1);
DWORD busySpan[COUNT]; //array of busy times
DWORD idleSpan[COUNT]; //array of idle times
int half = INTERVAL / 2;
double radian = 0.0;
for(int i = 0; i < COUNT; i++)
{
busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));
idleSpan[i] = INTERVAL - busySpan[i];
radian += SPLIT;
}
DWORD startTime = 0;
int j = 0;
while (true)
{
j = j % COUNT;
startTime = GetTickCount();
while ((GetTickCount() - startTime) <= busySpan[j]) ;
Sleep(idleSpan[j]);
//为甚么会显示正弦,因为无论怎么分配时间片,在300ms内执行的时间占总的时间的比例是不变的,这正是cpu利用率的定义
j++;
}
return 0;
}
*/
/*
#include "Windows.h"
#include "stdlib.h"
#include "math.h"
const double SPLIT = 0.01;
const int COUNT = 200;
const double PI = 3.14159265;
const int INTERVAL = 300;
int main(int argc, CHAR* argv[])
{
SetProcessAffinityMask(
GetCurrentProcess(),
0x00000001 //cpu mask
);
DWORD busySpan[COUNT]; //array of busy times
DWORD idleSpan[COUNT]; //array of idle times
int half = INTERVAL / 2;
double radian = 0.0;
for(int i = 0; i < COUNT; i++)
{
busySpan[i] = (DWORD)(half + (sin(PI * radian) * half));
idleSpan[i] = INTERVAL - busySpan[i];
radian += SPLIT;
}
DWORD startTime = 0;
int j = 0;
while (true)
{
j = j % COUNT;
startTime = GetTickCount();
while ((GetTickCount() - startTime) <= busySpan[j]) ;
Sleep(idleSpan[j]);
j++;
}
return 0;
}
*/
/*
#include <windows.h>
const DWORD busyTime = 10;
const DWORD idleTime = 10;
int main()
{
for(;;)
{
DWORD startTime = GetTickCount();
while(GetTickCount()-startTime<=busyTime)
;
Sleep(idleTime);
}
return 0;
}*/
#include <Windows.h>
int main()
{
int busyTime = 300; // 10 ms
int idleTime = busyTime;
DWORD startTime = 0;
SetProcessAffinityMask(
GetCurrentProcess(),
0x00000001 //cpu mask
);
while(true)
{
startTime = GetTickCount();
// busy loop
while((GetTickCount()- startTime) <= busyTime);
// idle loop
Sleep(idleTime);
}
return 0;
}