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
}
응용을 잘 해봐야겠네요.