小编Nik*_*las的帖子

如何在没有不稳定功能或外部包的情况下从 mpsc::channel 读取指定的时间?

Receiver我正在尝试在指定的时间内连续读取 a 。我想出了以下解决方案

pub fn get<T>(
    rx: &Receiver<T>,
    get_duration: time::Duration,
) -> Result<(), Err> {
    let (dur_tx, dur_rx) = channel();
    let _ = thread::spawn(move || {
        // timer to kill receiving
        thread::sleep(get_duration);
        let _ = dur_tx.send("tick");
    });

    let mut time_to_break = false;
    while time_to_break == false {
        match rx.try_recv() {
            Ok(resp) => {
                //...
            }
            Err(_) => ()
        }
        thread::sleep(time::Duration::from_millis(1)); // avoid using cpu 100%
        let _ = dur_rx.try_recv().map(|_| time_to_break = true);
    }
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来解决这个问题,而无需不稳定或不推荐使用的功能(例如select)或外部板条箱?

timeout channel rust

1
推荐指数
1
解决办法
1210
查看次数

标签 统计

channel ×1

rust ×1

timeout ×1