本文簡要介紹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()
獲取當前時間:
平台 | 係統調用 |
---|---|
SGX | insecure_time 用戶調用.更多信息新交所的計時 |
UNIX | clock_gettime(單調時鍾) |
Darwin | mach_absolute_time |
VXWorks | clock_gettime(單調時鍾) |
SOLID | get_tim |
WASI | __wasi_clock_time_get(單調時鍾) |
Windows | QueryPerformanceCounter |
免責聲明:這些係統調用可能會隨著時間而改變。
注意:如果底層結構不能代表新的時間點,像 add
這樣的數學運算可能會出現Panics。
相關用法
- Rust Instant.checked_duration_since用法及代碼示例
- Rust Instant.now用法及代碼示例
- Rust Instant.saturating_duration_since用法及代碼示例
- Rust Instant.duration_since用法及代碼示例
- Rust Instant.elapsed用法及代碼示例
- Rust IntoKeys用法及代碼示例
- Rust IntoIter.as_mut_slice用法及代碼示例
- Rust Infallible用法及代碼示例
- Rust IntErrorKind用法及代碼示例
- Rust Intersection用法及代碼示例
- Rust IntoInnerError.error用法及代碼示例
- Rust Into用法及代碼示例
- Rust Incoming用法及代碼示例
- Rust IntoIter.new用法及代碼示例
- Rust Index用法及代碼示例
- Rust IntoValues用法及代碼示例
- Rust IntoIterator.into_iter用法及代碼示例
- Rust IntoInnerError.into_inner用法及代碼示例
- Rust IntoInnerError.into_parts用法及代碼示例
- Rust IntoIter.as_slice用法及代碼示例
- Rust IntoIterator用法及代碼示例
- Rust IntoIter用法及代碼示例
- Rust IntoRawFd.into_raw_fd用法及代碼示例
- Rust IntoInnerError.into_error用法及代碼示例
- Rust IntoInnerError用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Struct std::time::Instant。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。