< 返回版块

cangmohuyang 发表于 2020-01-08 18:06

Tags:线程,超时

需要写一个线程超时功能,但是找到写法,哪个大神给个解决方案。 类似golang的

go fun(){ for{ select{ case <-chan:; case<-time.after(3*time.secode): } }()

评论区

写评论
juzi5201314 2020-01-17 15:01

可以用channel实现,我是这样做的:

use crossbeam::channel::bounded;

use std::thread;
use std::time::Duration;

fn main() {
    let (s, r) = bounded(0);
    thread::spawn(move || {
        thread::sleep(Duration::from_secs(3));//假设线程使用了3秒
        s.send(());
    });
    //2秒超时
    if let Ok(msg) = r.recv_timeout(Duration::from_secs(2)) {
        println!("Hello, world!");
    }else {
        println!("Time out");
    };

}
laizy 2020-01-11 21:59

可以用crossbeam里的channel,用Condvar::wait_timeout应该也能造一个简单可用的。

jmjoy 2020-01-09 18:16

操作系统原生线程好像没有这种写法吧,推荐使用async/await,关键字futures, futures::select, futures-timer。

phper-chen 2020-01-08 19:51
thread::spawn(move || {
    let client = redis::Client::open("redis://127.0.0.1:6379").unwrap();

    let mut con = client.get_connection().unwrap();

    for i in 4000001..5000000 {
        let _ : () = con.set(i, 1).unwrap();
    }
});

// 等待50millis 退出? thread::sleep(time::Duration::from_millis(50));

1 共 4 条评论, 1 页