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}