A RAII that executes you function whenever the wrapped object gets dropped.
Joining threads when they fall out of scope:
extern crate drop_guard;
use drop_guard::DropGuard;
use std::thread::{spawn, sleep};
use std::time::guard;
fn main() {
let _ = guard(spawn(move || {
sleep(Duration::from_secs(2));
println!("println! from thread");
})
, |join_handle| join_handle.join().unwrap());
println!("Waiting for thread ...");
}
Feel free to run the included examples:
cargo run --example drop
cargo run --example rainbow
cargo run --example thread
cargo run --example threadpool
Contributions are very welcome. Feel free to bring your own ideas or continue one of these:
- Add example/test with panic between guard and drop
- Add example/test with panic in guard closure
- Add minimal rustc version
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your discression.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.