-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Repaint signal cannot be shared between threads #82
Comments
Hi!
let thread = std::thread::spawn(move || {
repaint_signal.request_repaint();
}); That should work! |
Thanks for getting back to me 😄 I tried adding the move as you suggested but that didn't seem to fix the problem. The error message that cargo spits out seemed to say that This seems to agree with the source for Arc that I found in the rust-doc #[stable(feature = "rust1", since = "1.0.0")]
unsafe impl<T: ?Sized + Sync + Send> Send for Arc<T> {}
#[stable(feature = "rust1", since = "1.0.0")]
unsafe impl<T: ?Sized + Sync + Send> Sync for Arc<T> {} I don't understand enough about the internals of rust to be even remotely confident that I didn't make an unrelated mistake or messed up my build environment somehow so please let me know if I've gone wrong somewhere. I've also attached the error message and the file I used to generate it so you can let me know if I'm interpreting the output correctly.
use egui::{app::IntegrationContext, CtxRef};
struct App {}
impl egui::app::App for App {
fn name(&self) -> &str {
"Name"
}
fn ui(&mut self, ctx: &CtxRef, integration_context: &mut IntegrationContext) {
let repaint_signal = integration_context.repaint_signal.clone();
let thread = std::thread::spawn(move || {
repaint_signal.request_repaint();
});
thread.join();
}
}
fn main() {
egui_glium::run(Box::new(App {}))
} |
You are of course correct! I will come with a fix shortly. And thanks for your report! |
You should now be able to continue if you add the following patch to your
Good luck! |
Great! Thanks for the help 😁 |
Hey,
I've been having problems sharing the repaint signal between threads. It seems the problem is that Arc requires that it wraps types that implement send and sync. Though I am new enough to rust that it could also be my fault.
The following code (in the ui function) will cause the error.
I'm happy to fix this issue if the problem wasn't caused by my own lack of understanding.
The text was updated successfully, but these errors were encountered: