gistlib
Here's a sample code that shows how to get the CPU usage of the system in Rust:
main.rs#[cfg(target_os = "windows")] fn cpu_time() -> u64 { use winapi::um::processthreadsapi::*; use winapi::um::psapi::*; use winapi::um::winnt::*; let process = unsafe { GetCurrentProcess() }; let mut creation_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let mut exit_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let mut kernel_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let mut user_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let success = unsafe { GetProcessTimes( process, &mut creation_time, &mut exit_time, &mut kernel_time, &mut user_time, ) }; if success == 0 { panic!("GetProcessTimes failed") } let kernel_time = (kernel_time.dwHighDateTime as u64) << 32 | kernel_time.dwLowDateTime as u64; let user_time = (user_time.dwHighDateTime as u64) << 32 | user_time.dwLowDateTime as u64; kernel_time + user_time } #[cfg(not(target_os = "windows"))] fn cpu_time() -> u64 { unimplemented!() } fn main() { let before = cpu_time(); // do some CPU-intensive work here let after = cpu_time(); let diff = after - before; let usage = ((diff as f64) / 10000000.0) * 100.0; // in percentage println!("CPU usage: {:.2}%", usage); } 1434 chars58 lines
#[cfg(target_os = "windows")] fn cpu_time() -> u64 { use winapi::um::processthreadsapi::*; use winapi::um::psapi::*; use winapi::um::winnt::*; let process = unsafe { GetCurrentProcess() }; let mut creation_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let mut exit_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let mut kernel_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let mut user_time = FILETIME { dwLowDateTime: 0, dwHighDateTime: 0, }; let success = unsafe { GetProcessTimes( process, &mut creation_time, &mut exit_time, &mut kernel_time, &mut user_time, ) }; if success == 0 { panic!("GetProcessTimes failed") } let kernel_time = (kernel_time.dwHighDateTime as u64) << 32 | kernel_time.dwLowDateTime as u64; let user_time = (user_time.dwHighDateTime as u64) << 32 | user_time.dwLowDateTime as u64; kernel_time + user_time } #[cfg(not(target_os = "windows"))] fn cpu_time() -> u64 { unimplemented!() } fn main() { let before = cpu_time(); // do some CPU-intensive work here let after = cpu_time(); let diff = after - before; let usage = ((diff as f64) / 10000000.0) * 100.0; // in percentage println!("CPU usage: {:.2}%", usage); }
This code should work on Windows, but for other operating systems, you may need to use different APIs to get the CPU usage.
gistlibby LogSnag