blob: ab12c3c689a7cdcccd7dd7d5abd14ab0f6bdbf3e [file] [log] [blame]
use crate::sys::windows::Event;
use crate::sys::windows::Selector;
use crate::Token;
use miow::iocp::CompletionPort;
use std::io;
use std::sync::Arc;
#[derive(Debug)]
pub struct Waker {
token: Token,
port: Arc<CompletionPort>,
}
impl Waker {
pub fn new(selector: &Selector, token: Token) -> io::Result<Waker> {
Ok(Waker {
token,
port: selector.clone_port(),
})
}
pub fn wake(&self) -> io::Result<()> {
let mut ev = Event::new(self.token);
ev.set_readable();
self.port.post(ev.to_completion_status())
}
}