LINUX.ORG.RU

Выполнить код в главном потоке на языке Rust

 ,


0

4

Добрый вечер.

В java я могу написать что-то подобное:

new Handler(Looper.getMainLooper()).post(runnable);
чтобы runnable выполнился в главном потоке. Можно ли сделать подобное в rust?

Есть фоновый поток, который производит какую-то работу и периодически отдаёт структуру, которую нужно запихнуть в GTK таблицу. GTK, как известно, не потокобезопасен и запихивание нужно производить в главном потоке. Не силён в GTK, использовал вот такой код:

glib::idle_add(move || {
  match rx.try_recv() {
    Ok(link) => process_link(&mut rows_iter, &mut store, link),
    Err(_) => { },
  }
  Continue(true)
});
Биндинги здесь. Но само собой он не годится, ибо выжирает cpu. Помогут ли мне события, ведь я не смогу безопасно инициировать их в фоновом потоке? Как это делается в реальных программах?

★★★

Эвент луп он и в европе луп.

pon4ik ★★★★★
()
Ответ на: комментарий от i_gnatenko_brain

Сигналы можно безопасно инициировать из другого потока?

Weres ★★★
() автор топика

Документация, которую ночью я почему-то прочитать не смог, намекает, что мне может помочь gdk_threads_add_idle_full. Приду домой - проверю.

Weres ★★★
() автор топика

Если кому-нибудь пригодится, решение здесь. Спасибо gkoz за помощь.

Weres ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.