real_world_mpsc/
real_world_mpsc.rs1use std::sync::mpsc::channel;
2use std::thread;
3use std::time::Duration;
4
5use setting_tracker::Setting;
6
7#[derive(Default, Debug)]
8struct Settings {
9 port: Setting<u16>,
10}
11
12fn main() {
13 let (sender, receiver) = channel();
15 let mut settings = Settings::default();
16 settings.port.cb(move |old, new| {
17 let old_and_new = (old.clone(), new.clone());
18 sender.send(old_and_new).unwrap();
19 });
20
21 thread::spawn(move || loop {
23 let port = receiver.recv();
24 if port.is_ok() {
25 println!(
26 "port changed: {:?} -> {:?}",
27 port.unwrap().0,
28 port.unwrap().1
29 );
30 }
31 });
32
33 let mut changing_port = 0u16;
35 loop {
36 changing_port = changing_port + 1;
37 settings.port.set(changing_port);
38 thread::sleep(Duration::from_millis(500));
39 }
40}
41
42