File tree Expand file tree Collapse file tree 2 files changed +15
-6
lines changed
examples/turtlesim_rs/src Expand file tree Collapse file tree 2 files changed +15
-6
lines changed Original file line number Diff line number Diff line change @@ -161,10 +161,14 @@ impl<'a> TurtleFrame<'a> {
161161 )
162162 . unwrap ( ) ;
163163
164- let nh_clone = Arc :: clone ( & nh) ;
164+ let nh_weak = Arc :: downgrade ( & nh) ;
165165 thread:: spawn ( move || loop {
166166 std:: thread:: sleep ( time:: Duration :: from_millis ( UPDATE_INTERVAL_MS / 2 ) ) ;
167- let _v = rclrs:: spin_once ( nh_clone. clone ( ) , Some ( time:: Duration :: ZERO ) ) ;
167+ if let Some ( nh_clone) = nh_weak. upgrade ( ) {
168+ let _ = rclrs:: spin_once ( nh_clone, Some ( time:: Duration :: ZERO ) ) ;
169+ } else {
170+ break ;
171+ }
168172 } ) ;
169173
170174 TurtleFrame {
Original file line number Diff line number Diff line change @@ -41,12 +41,17 @@ impl MyEguiApp {
4141
4242 let turtle_frame = Arc :: new ( Mutex :: new ( turtle_frame) ) ;
4343
44- let turtle_frame_clone = Arc :: clone ( & turtle_frame) ;
44+ let turtle_frame_weak = Arc :: downgrade ( & turtle_frame) ;
45+
4546 thread:: spawn ( move || loop {
4647 std:: thread:: sleep ( time:: Duration :: from_millis ( UPDATE_INTERVAL_MS ) ) ;
47- let mut frame = turtle_frame_clone. lock ( ) . unwrap ( ) ;
48- frame. update_turtles ( ) ;
49- frame. handle_service_requests ( ) ;
48+ if let Some ( turtle_frame_clone) = turtle_frame_weak. upgrade ( ) {
49+ let mut frame = turtle_frame_clone. lock ( ) . unwrap ( ) ;
50+ frame. update_turtles ( ) ;
51+ frame. handle_service_requests ( ) ;
52+ } else {
53+ break ;
54+ }
5055 } ) ;
5156
5257 MyEguiApp { turtle_frame }
You can’t perform that action at this time.
0 commit comments