active_time/lib.rs
1#[cfg(windows)]
2/// https://learn.microsoft.com/en-us/windows/win32/api/realtimeapiset/nf-realtimeapiset-queryunbiasedinterrupttime
3unsafe fn _active_time() -> std::io::Result<std::time::Duration> {
4 let mut ticks = std::mem::MaybeUninit::uninit();
5 let success = winapi::um::realtimeapiset::QueryUnbiasedInterruptTime(ticks.as_mut_ptr()) != 0;
6 if success {
7 Ok(std::time::Duration::from_nanos(ticks.assume_init() * 100))
8 } else {
9 Err(std::io::Error::last_os_error())
10 }
11}
12
13/// Returns the active time of the OS, not including sleep/hibernation.
14pub fn active_time() -> std::io::Result<std::time::Duration> {
15 unsafe {
16 _active_time()
17 }
18}