Проблема с запуском функции на языке программирования Rust Tauri
У меня есть функция, которая печатает миди-сообщение. Проблема заключается в том, что при использовании с Tauri функция запускает попытку построчно, и это не позволяет функции печатать миди-сообщение. Если я запускаю функцию в приложении Plan Rust, она работает. Кроме того, если я установлю режим сна для потока, он будет работать, как и ожидалось. Может кто-нибудь помочь с этим, пожалуйста
Проблема в том, что этот код не позволяет печатать миди-сообщения. функция запускает каждую строку сверху вниз, затем функция завершает работу
fn midi_engine() {
thread::spawn(|| {
let source_index = 0;
println!("Source index: {}", source_index);
let source = Source::from_index(source_index).unwrap();
let source_id = source.unique_id().unwrap_or(0);
println!("Source display name: {}", source.display_name().unwrap());
println!("Source unique id: {:08x}", source_id);
let client = Client::new("Example Client").unwrap();
let callback = |event_list: &EventList, context: &mut u32| {
// will print the midi messages
print!("{:08x}: {:?}", *context, event_list);
};
let mut input_port = client
.input_port_with_protocol("Example Port", Protocol::Midi10, callback)
.unwrap();
input_port.connect_source(&source, source_id).unwrap();
});
}
работает, но не правильный способ программирования:
fn midi_engine() {
thread::spawn(|| {
let source_index = 0;
println!("Source index: {}", source_index);
let source = Source::from_index(source_index).unwrap();
let source_id = source.unique_id().unwrap_or(0);
println!("Source display name: {}", source.display_name().unwrap());
println!("Source unique id: {:08x}", source_id);
let client = Client::new("Example Client").unwrap();
let callback = |event_list: &EventList, context: &mut u32| {
print!("{:08x}: {:?}", *context, event_list);
};
let mut input_port = client
.input_port_with_protocol("Example Port", Protocol::Midi10, callback)
.unwrap();
input_port.connect_source(&source, source_id).unwrap();
// adding this line makes it work. It will print for 10 second
thread::sleep(time::Duration::from_secs(10));
});
}