如何处理 Gtk-rs 中线程中不可恢复的错误?



我正在编写一个 Gtk-rs 应用程序。我有一个后台线程通过 MPSC 通道将事件发送到主 Gtk 线程。 我应该如何处理此后台线程中不可恢复的错误?

我不想处理它们(惊慌!或不惊慌!(。

目前,线程会死机,但主应用程序不会停止。我希望整个应用程序因错误而崩溃。

let (sender, receiver) = glib::MainContext::channel(glib::PRIORITY_DEFAULT);
// Spawn the thread and move the sender in there
thread::spawn(move || {
    loop {
        let msg = do_work().unwrap();
        sender.send(msg).unwrap();
    }
});
receiver.attach(None, move |msg| {
    ...
    glib::Continue(true)
});
  • 我不想通过通道发送结果,因为它不适用于调用函数中的恐慌。
  • 加入线程可以解决问题,但我认为我不能用 Gtk-rs 做到这一点,因为它正在阻塞。

这个问题类似于我如何在线程上引起恐慌以立即结束主线程?,但我想知道 Gtk-rs 有更好的解决方案。

set_hook更改紧急处理程序可以解决问题。

fn change_panic_behaviour() {                
let hook = std::panic::take_hook();
    std::panic::set_hook(Box::new(move |error| {
        hook(error);
        std::process::exit(1);
    }));
}

相关内容

  • 没有找到相关文章

最新更新