7 changed files with 59 additions and 32 deletions
@ -0,0 +1,31 @@ |
|||
use chan; |
|||
use chan_signal; |
|||
use std::time::Duration; |
|||
|
|||
pub struct Waiter { |
|||
signal: chan::Receiver<chan_signal::Signal>, |
|||
} |
|||
|
|||
impl Waiter { |
|||
pub fn new() -> Waiter { |
|||
Waiter { |
|||
signal: chan_signal::notify(&[chan_signal::Signal::INT]), |
|||
} |
|||
} |
|||
pub fn wait(&self, duration: Duration) -> Option<chan_signal::Signal> { |
|||
let signal = &self.signal; |
|||
let timeout = chan::after(duration); |
|||
let result; |
|||
chan_select! { |
|||
signal.recv() -> sig => { |
|||
result = sig; |
|||
}, |
|||
timeout.recv() => { result = None; }, |
|||
} |
|||
result.map(|sig| info!("received SIG{:?}", sig)); |
|||
result |
|||
} |
|||
pub fn poll(&self) -> Option<chan_signal::Signal> { |
|||
self.wait(Duration::from_secs(0)) |
|||
} |
|||
} |
Loading…
Reference in new issue