為了算出行程的資源占用情況,對long long 和 unsigned long long 分別取別名為int64_time 和 uint64_time。
因為Windows作業系統中計時的方式和我們在生活中常用的時間計量單位不同,對時間進行格式化。
利用作業系統提供的獲取行程資料的方式,撰寫相應函式。(例如,GetSystemInfo()函式用來獲取作業系統的cpu個數;GetProcessTime()函式用來獲取行程的創建和結束時間,用戶態和核心態模式下運行的時間)
通過公式:
system_time = (formating(&kernel_time) + formating(&user_time)) / processer_count;
time = formating(&now);
計算出某一時刻內行程的時間資訊和系統當前的時間資訊。
再次回圈之后,算出時間差:
system_time_delta = system_time - last_system_time;
time_delta = time - last_time;
最后利用公式:算出cpu使用率。
cpu_usage_rate = int((system_time_delta *100) / time_delta);
但是,獲取時間的函式
GetProcessTimes(ProcessHandle,&creation_time,&exit_time,&kernel_time,&user_time)
需要行程句柄引數,而通過對所有行程進行快照,再把快照資訊中的行程ID轉換成句柄時,由于權限不夠,出現錯誤。
HANDLE hProcessSnap;
PROCESSENTRY32 pe32 = {0;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(hProcessSnap,&pe32);
ProcessHandle = 0penProcess(PROCESs_ALL_ACCESS,false,pe32.th32ProcessID);
unsigned long kkk = GetLastError();
printf( "%d\n",kkk);

所以我在API操作手冊上查了對OpenProcess的解釋,我也找出了錯誤:


也就是跟GetLasterror()回傳的錯誤碼相符和。
我再試著對演算法的行程提高權限,并且權限提高成功了,但是問題還是沒有得到解決。

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269506.html
標籤:模式及實現
