diff options
author | 2022-05-04 14:25:04 +0200 | |
---|---|---|
committer | 2022-05-04 15:21:07 +0200 | |
commit | f1ec0af5070fe2752967cdc38ed66b8b70882366 (patch) | |
tree | 7bf1d4ce9c761b94a5dc7c40b265f62afb24fedf /winit | |
parent | e24f26c28f09916f04f536a52368dcd1a4f34ed4 (diff) | |
download | iced-f1ec0af5070fe2752967cdc38ed66b8b70882366.tar.gz iced-f1ec0af5070fe2752967cdc38ed66b8b70882366.tar.bz2 iced-f1ec0af5070fe2752967cdc38ed66b8b70882366.zip |
Run `system::information` in a different thread
... since it seems it can block for a couple of seconds.
Diffstat (limited to 'winit')
-rw-r--r-- | winit/src/application.rs | 17 | ||||
-rw-r--r-- | winit/src/system.rs | 2 |
2 files changed, 12 insertions, 7 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs index 421ae398..90b03d56 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -583,14 +583,19 @@ pub fn run_command<Message: 'static + std::fmt::Debug + Send, E: Executor>( system::Action::QueryInformation(_tag) => { #[cfg(feature = "system")] { - let information = - crate::system::information(_graphics_info()); + let graphics_info = _graphics_info(); + let proxy = proxy.clone(); - let message = _tag(information); + let _ = std::thread::spawn(move || { + let information = + crate::system::information(graphics_info); - proxy - .send_event(message) - .expect("Send message to event loop"); + let message = _tag(information); + + proxy + .send_event(message) + .expect("Send message to event loop") + }); } } }, diff --git a/winit/src/system.rs b/winit/src/system.rs index fa4ad1a3..0ed61dc9 100644 --- a/winit/src/system.rs +++ b/winit/src/system.rs @@ -6,7 +6,7 @@ use iced_graphics::compositor; /// Query for available system information. pub fn fetch_information<Message>( - f: impl Fn(Information) -> Message + 'static, + f: impl Fn(Information) -> Message + Send + 'static, ) -> Command<Message> { Command::single(command::Action::System(Action::QueryInformation( Box::new(f), |