get system cpu usage in rust

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 chars
58 lines

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