當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。