|
1 |
| -use std::mem; |
2 |
| -use winapi::shared::minwindef::FILETIME; |
| 1 | +use std::mem::MaybeUninit; |
3 | 2 | use winapi::um::processthreadsapi::{GetCurrentProcess, GetProcessTimes};
|
4 | 3 |
|
5 | 4 | pub fn get_cpu_time() -> Option<u64> {
|
6 |
| - unsafe { |
| 5 | + let (kernel, user) = unsafe { |
7 | 6 | let process = GetCurrentProcess();
|
8 |
| - let mut _creation: FILETIME = mem::uninitialized(); |
9 |
| - let mut _exit: FILETIME = mem::uninitialized(); |
10 |
| - let mut kernel: FILETIME = mem::uninitialized(); |
11 |
| - let mut user: FILETIME = mem::uninitialized(); |
12 |
| - GetProcessTimes(process, &mut _creation, &mut _exit, &mut kernel, &mut user); |
13 |
| - let kernel = (kernel.dwHighDateTime as u64) << 32 | kernel.dwLowDateTime as u64; |
14 |
| - let user = (user.dwHighDateTime as u64) << 32 | user.dwLowDateTime as u64; |
15 |
| - Some(100 * (kernel + user)) |
16 |
| - } |
| 7 | + let mut _creation = MaybeUninit::uninit(); |
| 8 | + let mut _exit = MaybeUninit::uninit(); |
| 9 | + let mut kernel = MaybeUninit::uninit(); |
| 10 | + let mut user = MaybeUninit::uninit(); |
| 11 | + if GetProcessTimes( |
| 12 | + process, |
| 13 | + _creation.as_mut_ptr(), |
| 14 | + _exit.as_mut_ptr(), |
| 15 | + kernel.as_mut_ptr(), |
| 16 | + user.as_mut_ptr(), |
| 17 | + ) == 0 |
| 18 | + { |
| 19 | + return None; |
| 20 | + } |
| 21 | + (kernel.assume_init(), user.assume_init()) |
| 22 | + }; |
| 23 | + let kernel = (kernel.dwHighDateTime as u64) << 32 | kernel.dwLowDateTime as u64; |
| 24 | + let user = (user.dwHighDateTime as u64) << 32 | user.dwLowDateTime as u64; |
| 25 | + Some(100 * (kernel + user)) |
17 | 26 | }
|
0 commit comments