CPU Genuine Interl(R) CPU
2140@1.60GHZ 1.60GHZ
酷瑞双核1.6
操作系统是xp
编译工具:VC6.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 也就是双核的主CPU处理,由于是双核,我只用一个CPU来处理演示.
);
DWORD busySpan[COUNT]; //array of busy times CPU处理时间
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));//正旋波
busySpan [ i ] = (DWORD)INTERVAL;//这里是占用CPU的关键,双核心的是50%,而单核心的是100%,用INTERVAL=300(双核)就是占用50%如果是150就是25%
//busySpan [ i ] = (DWORD)INTERVAL/2;//25%
idleSpan [ i ] = INTERVAL - busySpan
;
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;
}
相关文章连接:
http://www.cppblog.com/Fox/archi ... pu_using_curve.html
说实在的,我看这文章也是半桶水,只是把他的程序自己拿来改一下而已,偷懒了
[
本帖最后由 hpyyang 于 2008-8-19 15:26 编辑 ]