其实这个题满跑很简单,那就是写个死循环就行了。操作系统分给的时间片就会越来越多。但是现在的程序都是多核的,比如我的电脑是4核的,会发现,CPU大概永远在25~27%左右,并没有达到100%。
如果想达到百分之百,只需要使用多线程,就可以了。
今天看到最挑衅的一句话是:
有种你让CPU画个圆,当时整个人都不好了。。。
下面来看50%的情况,编程之美上说,“sleep一个时间片,work一个时间片”不停切换应该就可以到50%。后来我发现效果不好。就算使用GetTickCount,效果也不好,因为毕竟电脑还有别的程序要运行。
结果如下:
代码如下:
正弦曲线:
效果如下:
void Work(DWORD time) { DWORD now = GetTickCount(); for(;GetTickCount() <</span> now + time;) {</p> <p>} } DWORD WINAPI DrawThread(LPVOID lParam) { double deta = 0.1f; while (true) { double time = 500 + 500 * sin(deta); Work(time); Sleep(1000-time); deta += 0.1f; } return 0; } int main() { HANDLE hThread[4]; DWORD idThread[4]; hThread[0] = CreateThread(0,0,DrawThread,NULL,0,&idThread[0]); hThread[1] = CreateThread(0,0,DrawThread,NULL,0,&idThread[1]); hThread[2] = CreateThread(0,0,DrawThread,NULL,0,&idThread[2]); hThread[3] = CreateThread(0,0,DrawThread,NULL,0,&idThread[3]); SetThreadAffinityMask(hThread[0], 0x00000001); SetThreadAffinityMask(hThread[1], 0x00000010); SetThreadAffinityMask(hThread[2], 0x00000100); SetThreadAffinityMask(hThread[3], 0x00001000);</p> <p>WaitForSingleObject(hThread[0], INFINITE); WaitForSingleObject(hThread[1], INFINITE); WaitForSingleObject(hThread[2], INFINITE); WaitForSingleObject(hThread[3], INFINITE);</p> <p>return 0; }