Function std::thread::park_timeout
1.4.0 · source · pub fn park_timeout(dur: Duration)
Expand description
除非直到当前线程的 token 可用或达到指定的持续时间 (否则可能会虚假唤醒),否则将阻塞。
该函数的语义与 park
等效,除了线程被阻塞的时间不超过 dur
。
由于抢占或平台差异等异常情况可能不会导致最长等待时间精确到 dur
长,因此不应将此方法用于精确计时。
有关更多详细信息,请参见 park 文档。
特定于平台的行为
不支持纳秒级睡眠精度的平台会将 dur
舍入为最接近的睡眠时间粒度。
Examples
等待超时完全到期:
use std::thread::park_timeout;
use std::time::{Instant, Duration};
let timeout = Duration::from_secs(2);
let beginning_park = Instant::now();
let mut timeout_remaining = timeout;
loop {
park_timeout(timeout_remaining);
let elapsed = beginning_park.elapsed();
if elapsed >= timeout {
break;
}
println!("restarting park_timeout after {elapsed:?}");
timeout_remaining = timeout - elapsed;
}
Run