pub struct SignalGuard(/* private fields */);Implementations§
Source§impl SignalGuard
impl SignalGuard
Sourcepub fn new() -> SignalGuard
pub fn new() -> SignalGuard
Block necessary signals (SIGINT, SIGQUIT and SIGTERM on *nix,
Ctrl+C and Ctrl+Break on Windows).
New threads should be spawned after this.
Examples found in repository?
examples/simple.rs (line 17)
16fn main() {
17 let signal_guard = SignalGuard::new();
18
19 let handle = thread::spawn(|| {
20 println!("Worker thread started. Type Ctrl+C to stop.");
21 while !STOP.load(Ordering::Acquire) {
22 println!("working...");
23 thread::sleep(Duration::from_millis(500));
24 }
25 println!("Bye.");
26 });
27
28 signal_guard.at_exit(move |sig| {
29 println!("Signal {} received.", sig);
30 STOP.store(true, Ordering::Release);
31 handle.join().unwrap();
32 });
33}Sourcepub fn at_exit<F: FnOnce(usize)>(&self, handler: F)
pub fn at_exit<F: FnOnce(usize)>(&self, handler: F)
Block the running thread until a signal is received. Then the
handler will be called in the main thread.
Do not put any code after this.
Examples found in repository?
examples/simple.rs (lines 28-32)
16fn main() {
17 let signal_guard = SignalGuard::new();
18
19 let handle = thread::spawn(|| {
20 println!("Worker thread started. Type Ctrl+C to stop.");
21 while !STOP.load(Ordering::Acquire) {
22 println!("working...");
23 thread::sleep(Duration::from_millis(500));
24 }
25 println!("Bye.");
26 });
27
28 signal_guard.at_exit(move |sig| {
29 println!("Signal {} received.", sig);
30 STOP.store(true, Ordering::Release);
31 handle.join().unwrap();
32 });
33}Auto Trait Implementations§
impl Freeze for SignalGuard
impl RefUnwindSafe for SignalGuard
impl Send for SignalGuard
impl Sync for SignalGuard
impl Unpin for SignalGuard
impl UnwindSafe for SignalGuard
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more