Struct std::thread::JoinHandle 1.0.0[−][src]
pub struct JoinHandle<T>(_);
Expand description
拥有加入线程的权限 (在线程终止时阻止)。
JoinHandle
在被丢弃时会 分离 相关的线程,这意味着不再有线程句柄,也无法在其上访问 join
。
由于平台的限制,无法使用 Clone
此句柄: 加入线程的能力是唯一拥有的权限。
该 struct
由 thread::spawn
函数和 thread::Builder::spawn
方法创建。
Examples
从 thread::spawn
创建:
use std::thread; let join_handle: thread::JoinHandle<_> = thread::spawn(|| { // 这里一些工作 });Run
从 thread::Builder::spawn
创建:
use std::thread; let builder = thread::Builder::new(); let join_handle: thread::JoinHandle<_> = builder.spawn(|| { // 这里一些工作 }).unwrap();Run
子节点离开父节点并活的更久
use std::thread; use std::time::Duration; let original_thread = thread::spawn(|| { let _detached_thread = thread::spawn(|| { // 在这里我们睡觉以确保第一个线程在此之前返回。 thread::sleep(Duration::from_millis(10)); // 即使 JoinHandle 被丢弃,也将调用它。 println!("♫ Still alive ♫"); }); }); original_thread.join().expect("The thread being joined has panicked"); println!("Original thread is joined."); // 我们确保在主线程返回之前,新线程有时间运行。 thread::sleep(Duration::from_millis(1000));Run
Implementations
等待关联的线程完成。
就 atomic memory orderings 而言,关联线程的完成与此函数返回同步。
换句话说,在 join
返回之后发生的所有操作之前,将对该线程执行的所有操作进行排序。
如果子线程 panics,则使用给 panic!
的参数返回 Err
。
Panics
如果某个线程尝试加入自身,则该函数在某些平台上可能为 panic,否则可能会在加入线程时产生死锁。
Examples
use std::thread; let builder = thread::Builder::new(); let join_handle: thread::JoinHandle<_> = builder.spawn(|| { // 这里一些工作 }).unwrap(); join_handle.join().expect("Couldn't join on the associated thread");Run
Trait Implementations
This is supported on Windows only.
提取原始句柄,无需任何所有权。