| 2 | use shared_memory::*; |
| 3 | |
| 4 | fn main() -> Result<(), Box<dyn std::error::Error>> { |
| 5 | env_logger::init(); |
| 6 | // Attempt to create a mapping or open if it already exists |
| 7 | println!("Getting the shared memory mapping"); |
| 8 | let shmem = match ShmemConf::new().size(4096).flink("event_mapping").create() { |
| 9 | Ok(m) => m, |
| 10 | Err(ShmemError::LinkExists) => ShmemConf::new().flink("event_mapping").open()?, |
| 11 | Err(e) => return Err(Box::new(e)), |
| 12 | }; |
| 13 | |
| 14 | if shmem.is_owner() { |
| 15 | //Create an event in the shared memory |
| 16 | println!("Creating event in shared memory"); |
| 17 | let (evt, used_bytes) = unsafe { Event::new(shmem.as_ptr(), true)? }; |
| 18 | println!("\tUsed {} bytes", used_bytes); |
| 19 | |
| 20 | println!("Launch another instance of this example to signal the event !"); |
| 21 | evt.wait(Timeout::Infinite)?; |
| 22 | println!("\tGot signal !"); |
| 23 | } else { |
| 24 | // Open existing event |
| 25 | println!("Openning event from shared memory"); |
| 26 | let (evt, used_bytes) = unsafe { Event::from_existing(shmem.as_ptr())? }; |
| 27 | println!("\tEvent uses {} bytes", used_bytes); |
| 28 | |
| 29 | println!("Signaling event !"); |
| 30 | evt.set(EventState::Signaled)?; |
| 31 | println!("\tSignaled !"); |
| 32 | } |
| 33 | |
| 34 | println!("Done !"); |
| 35 | Ok(()) |
| 36 | } |