#跨平台 #挂起 #系统 #单调 #时钟 #持续时间 #瞬间

bin+lib suspend-time

一个跨平台的、不受挂起影响的单调时钟,用 Rust 编写!

3 个版本

0.1.2 2024 年 7 月 24 日
0.1.1 2024 年 7 月 19 日
0.1.0 2024 年 7 月 19 日

#227 in 操作系统

Download history 494/week @ 2024-07-19 268/week @ 2024-07-26 385/week @ 2024-08-02 451/week @ 2024-08-09

1,598 每月下载量

MIT 许可证

27KB
345

suspend-time

Suspend-time 是一个跨平台的、不受挂起影响的单调时钟,用 Rust 编写!
它允许系统挂起(例如,当用户在 Windows 上关闭笔记本电脑时)不会影响 Instant 持续时间和超时!

API 文档

示例

SuspendUnawareInstant 的使用示例

use std::{thread, time};
use suspend_time::{SuspendUnawareInstant};

fn main() {
    // If you used std::time::Instant here and you suspend the system on windows,
    // it will print that more than 3 seconds (circa July 2024).
    // With SuspendUnawareInstant this has no effect.
    let instant = SuspendUnawareInstant::now();
    let three_secs = time::Duration::from_secs(3);
    thread::sleep(three_secs);
    println!("{:#?}", instant.elapsed());
}

suspend_time::timeout 的使用示例

use std::time::Duration;

#[tokio::main]
async fn main() {
    // If you suspend the system during main's execution, Tokio will time
    // out even though it only slept for 1 second. suspend_time::timeout does not.
    let _ = suspend_time::timeout(
        Duration::from_secs(2),
        suspend_time::sleep(Duration::from_secs(1)),
    ).await;
}

InstantSuspendUnawareInstant

这个库是 std::time::Instant 的直接替代品,因此您无需担心更新您的代码。

与标准库中 Instant 的实现类似,但它在所有由该库支持的平台上始终对系统挂起保持无知。

历史上,这已在标准库中不一致,Windows 允许在系统挂起/休眠时时间流逝,然而 Unix 系统在系统挂起期间并不“流逝时间”。在这个库中,当在任何平台上系统挂起时,时间 永远不会流逝

此瞬间实现是

  • 跨平台(Windows,Unix)
  • 单调(时间永远不会倒退)
  • 不受挂起影响(当您将计算机休眠时,“时间”不会流逝。)

依赖项

~13–23MB
~297K SLoC