pub struct CtrlBreak { /* private fields */ }
signal
only.Expand description
Represents a listener which receives “ctrl-break” notifications sent to the process
via SetConsoleCtrlHandler
.
This listener can be turned into a Stream
using CtrlBreakStream
.
A notification to this process notifies all receivers for this event. Moreover, the notifications are coalesced if they aren’t processed quickly enough. This means that if two notifications are received back-to-back, then the listener may only receive one item about the two notifications.
Implementations§
source§impl CtrlBreak
impl CtrlBreak
sourcepub async fn recv(&mut self) -> Option<()>
pub async fn recv(&mut self) -> Option<()>
Receives the next signal notification event.
None
is returned if no more events can be received by this listener.
§Examples
use tokio::signal::windows::ctrl_break;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// A listener of CTRL-BREAK events.
let mut signal = ctrl_break()?;
// Print whenever a CTRL-BREAK event is received.
loop {
signal.recv().await;
println!("got signal CTRL-BREAK");
}
}
sourcepub fn poll_recv(&mut self, cx: &mut Context<'_>) -> Poll<Option<()>>
pub fn poll_recv(&mut self, cx: &mut Context<'_>) -> Poll<Option<()>>
Polls to receive the next signal notification event, outside of an
async
context.
None
is returned if no more events can be received by this listener.
§Examples
Polling from a manually implemented future
use std::pin::Pin;
use std::future::Future;
use std::task::{Context, Poll};
use tokio::signal::windows::CtrlBreak;
struct MyFuture {
ctrl_break: CtrlBreak,
}
impl Future for MyFuture {
type Output = Option<()>;
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
println!("polling MyFuture");
self.ctrl_break.poll_recv(cx)
}
}