Проблема с запуском функции на языке программирования 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));
       
    });
}

0 ответов

Другие вопросы по тегам