Autohotkey를 자주 이용하면서 컴퓨터 자원을 최대한 활용해보기 위해 CPU사용량을 알아보고 싶었습니다. 여기저기 검색을 하던 중 reddit에서 이런 방법을 추천하는걸 찾았습니다.

MsgBox, % GetCpuLoad()


GetCpuLoad(period := 500) {
 total := GetSystemTimes(idle)
 Sleep, % period
 total2 := GetSystemTimes(idle2)
 Return 100*(1 - (idle2 - idle)/(total2 - total))
}

GetSystemTimes(ByRef IdleTime) {
 DllCall("GetSystemTimes", "Int64P", IdleTime, "Int64P", KernelTime, "Int64P", UserTime)

 Return KernelTime + UserTime
}

일단 작동에 문제는 없으나 작업관리자에 나온값과 실시간으로는 차이가 좀 있어 보입니다만 이 정도면 충분히 사용할만 하다고 생각되어 좀 더 깔끔한 코드를 찾아보았습니다.

Loop{
 ToolTip % CPULoad() "`n" 
 Sleep 1000
}

; CPULoad ===========================================================================
CPULoad(){
 static PIT, PKT, PUT

 if (Pit = "")
 {
     return 0, DllCall("GetSystemTimes", "Int64P", PIT, "Int64P", PKT, "Int64P", PUT)
 }

 DllCall("GetSystemTimes", "Int64P", CIT, "Int64P", CKT, "Int64P", CUT)
 IdleTime := PIT - CIT, KernelTime := PKT - CKT, UserTime := PUT - CUT
 SystemTime := KernelTime + UserTime

 return ((SystemTime - IdleTime) * 100) // SystemTime, PIT := CIT, PKT := CKT, PUT := CUT
}

응용을 잘 해봐야겠네요.

+ Recent posts