Untitled
unknown
plain_text
2 years ago
920 B
5
Indexable
use std::sync::mpsc::{channel, Sender};
use std::thread::JoinHandle;
#[derive(Debug)]
struct Message {
msg: usize
}
struct Looper {
sender: Sender<Message>,
threads: Vec<JoinHandle<()>>
}
impl Looper{
fn new <T: Fn(Message)->(), Q: Fn()->()> (process: T, cleanup: Q) -> Self {
let (tx, rx) = channel::<Message>();
let mut threads = Vec::new();
threads.push(std::thread::spawn(move || {
while let Ok(msg) = rx.recv(){
process(msg);
}
cleanup();
}));
return Looper{
sender: tx,
threads
}
}
pub fn send(&self, msg: Message){
self.sender.send(msg);
}
}
fn main() {
let f1 = |mut s: Message| {s.msg = 1; println!("Processata{:?}", s)};
let f2 = || {println!("Cleanup!")};
let str = Looper::new(f1, f2);
}
Editor is loading...