前面一節講了通過簡單循環操作控制CPU 的占用率。文章鏈接:www.2cto.com/kf/201110/107456.html
然而, 通過調用系統的GetTickCount()函數可以獲得系統啟動到現在的時間值,通過這個時間值也可以控制系統的繁忙的時間片和空閒的時間片。讓系統一個時間片不停地做循環,一個時間片做休眠,這樣一秒鐘以後品均下來也可以讓 CPU的占用率接近50%。
代碼:
// cpu_2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
const DWORD busyTime=10;
const DWORD idleTime=busyTime;
DWORD startTime=GetTickCount();
while(true)
{
startTime=GetTickCount();
while(GetTickCount()-startTime<=busyTime)
{
//IDLE
}
Sleep(idleTime);
}
return 0;
}
設置空閒時間片和繁忙時間片的大小,然後交替執行兩個操作。通過GetTickCount()函數 獲得當前啟動的時間,然後不停地獲取系統啟動時間,計算和這個時間片的差值,當差值達到時間片以後,進入另外一個時間片操作。
執行效果如圖:
這裡不知道為什麼因為CPU是雙核的,結果變成了一個核工作,一個核進行休眠了。可能還需要對雙核的CPU進行特殊的程序處理。在單核的CPU上應該沒有問題。
還望大家多多指教這個雙核的處理問題。
作者:Watkins.Song