这就是我得到的:
extern crate time;
use std::thread;
fn main() {
let start = time::get_time();
println!("Starting application");
do_stuff();
println!("Total {:?}", time::get_time() - start);
}
fn do_stuff() {
for i in 0..4i32 {
thread::spawn(move || {
thread::sleep_ms(1);
println!("doing stuff {:?}", i);
});
}
}
出于某种原因,我不熟悉应用程序不等待函数 do_stuff()
中的线程完成并关闭。所以这是我得到的输出:
Starting application
Total Duration { secs: 0, nanos: 808482 }
而不是像
Starting application
doing stuff 1
doing stuff 2
doing stuff 3
doing stuff 4
Total Duration { secs: 0, nanos: 808482 }
即使线程未返回任何内容,我如何让应用程序等待线程完成?
最佳答案
spawn
函数返回一个JoinHandle
。您可以将所有句柄收集到一个向量中,然后对它们调用 join
:
extern crate time;
use std::thread;
fn main() {
let start = time::get_time();
println!("Starting application");
do_stuff();
println!("Total {:?}", time::get_time() - start);
}
fn do_stuff() {
let handles: Vec<_> = (0..4).map(|i| {
thread::spawn(move || {
thread::sleep_ms(1);
println!("doing stuff {:?}", i);
})
}).collect();
for h in handles {
h.join().unwrap();
}
}
关于multithreading - 防止应用程序在所有线程完成之前关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046661/