当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Instant用法及代码示例


本文简要介绍rust语言中 Struct std::time::Instant 的用法。

用法

pub struct Instant(_);

对单调非递减时钟的测量。不透明且仅对 Duration 有用。

时刻总是保证在创建时不小于任何先前测量的时刻,并且对于诸如测量基准或计时操作需要多长时间等任务通常很有用。

但是请注意,不保证瞬间稳定的.换句话说,底层时钟的每个滴答声可能不是相同的长度(例如,有些秒可能比其他秒长)。瞬间可能会向前跳跃或经历时间膨胀(减速或加速),但它永远不会倒退。

瞬间是一种不透明的类型,只能相互比较。没有方法可以从瞬间获得“秒数”。相反,它只允许测量两个瞬间之间的持续时间(或比较两个瞬间)。

Instant 结构的大小可能因目标操作系统而异。

例子:

use std::time::{Duration, Instant};
use std::thread::sleep;

fn main() {
   let now = Instant::now();

   // we sleep for 2 seconds
   sleep(Duration::new(2, 0));
   // it prints '2'
   println!("{}", now.elapsed().as_secs());
}

特定于操作系统的行为

Instant 是系统特定类型的包装器,它的行为可能因底层操作系统而异。例如,以下代码段在 Linux 上很好,但在 macOS 上会出现Panics:

use std::time::{Instant, Duration};

let now = Instant::now();
let max_nanoseconds = u64::MAX / 1_000_000_000;
let duration = Duration::new(max_nanoseconds, 0);
println!("{:?}", now + duration);

底层系统调用

目前,以下系统调用正在使用 now() 获取当前时间:

免责声明:这些系统调用可能会随着时间而改变。

注意:如果底层结构不能代表新的时间点,像 add 这样的数学运算可能会出现Panics。

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::time::Instant。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。