use std::cell::Cell;
use std::rc::Rc;
use std::thread;
use arty_executor::{CycleOutcome, Executor};
fn main() {
let executor = unsafe { Executor::builder().build() };
let tasks = executor.tasks();
let shutdown_signal = Rc::new(Cell::new(false));
tasks.add({
let shutdown_signal = Rc::clone(&shutdown_signal);
async move {
println!("Hello from the async task!");
shutdown_signal.set(true);
}
});
let mut shutdown_started = false;
while executor.execute_cycle() != CycleOutcome::Shutdown {
if !shutdown_started && shutdown_signal.get() {
shutdown_started = true;
executor.begin_shutdown();
continue;
}
thread::yield_now();
}
}