#![no_main]
#![no_std]
extern crate flipperzero_rt;
extern crate flipperzero_alloc;
extern crate alloc;
use alloc::borrow::ToOwned;
use core::ffi::CStr;
use core::time::Duration;
use flipperzero::{furi::thread, println};
use flipperzero_rt::{entry, manifest};
manifest!(name = "Threads example");
entry!(main);
fn main(_args: Option<&CStr>) -> i32 {
println!("Main app started!");
let first = thread::spawn(|| {
println!("First thread started!");
thread::sleep(Duration::from_secs(5));
println!("First thread finished!");
0
});
thread::sleep(Duration::from_secs(1));
let second = thread::Builder::new()
.name("Flipper".to_owned())
.expect("name is valid")
.spawn(|| {
println!("Second thread started!");
thread::sleep(Duration::from_secs(2));
println!("Second thread finished!");
0
});
for (i, thread) in [&thread::current(), first.thread(), second.thread()]
.into_iter()
.enumerate()
{
if let Some(name) = thread.name() {
println!("Running thread {} ({})", i, name);
} else {
println!("Running unnamed thread {}", i);
}
}
drop(first);
second.join();
println!("Main app finished!");
0
}