2015-06-25 187 views
3

之前,所以這就是我的了:防止應用程序從關閉的所有線程完成

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 } 

如何讓我的應用程序等待線程完成,即使線程不返回任何?

回答

3

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(); 
    } 
} 
相關問題