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