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 12)
11fn main() {
12 let signal_guard = SignalGuard::new();
13
14 let handle = thread::spawn(|| {
15 println!("Worker thread started. Type Ctrl+C to stop.");
16 while !STOP.load(Ordering::Acquire) {
17 println!("working...");
18 thread::sleep(Duration::from_millis(500));
19 }
20 println!("Bye.");
21 });
22
23 signal_guard.at_exit(move |sig| {
24 println!("Signal {} received.", sig);
25 STOP.store(true, Ordering::Release);
26 handle.join().unwrap();
27 });
28}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 23-27)
11fn main() {
12 let signal_guard = SignalGuard::new();
13
14 let handle = thread::spawn(|| {
15 println!("Worker thread started. Type Ctrl+C to stop.");
16 while !STOP.load(Ordering::Acquire) {
17 println!("working...");
18 thread::sleep(Duration::from_millis(500));
19 }
20 println!("Bye.");
21 });
22
23 signal_guard.at_exit(move |sig| {
24 println!("Signal {} received.", sig);
25 STOP.store(true, Ordering::Release);
26 handle.join().unwrap();
27 });
28}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