I have a program that has an object oriented struct which has functions in it that use threading (std::thread). In the threads I want to access "self". Unfortunately when I do that, I get this unhelpful error:
error[E0521]: borrowed data escapes outside of associated function
--> src\screens\map\map.rs:170:34
|
67 | &mut self,
| ---------
| |
| `self` is a reference that is only valid in the associated function body
| let's call the lifetime of this reference `'1`
...
170 | let handle = thread::spawn(move || {
| __________________________________^
171 | | let renderbytes = self.cloudslayer.render(
172 | | runtimechunksize as u32,
173 | | runtimechunksize as u32,
... |
179 | | renderbytes
180 | | });
| | ^
| | |
| |______________________`self` escapes the associated function body here
| argument requires that `'1` must outlive `'static`
error[E0382]: borrow of moved value: `self`
--> src\screens\map\map.rs:340:9
|
67 | &mut self,
| --------- move occurs because `self` has type `&mut screens::map::map::Map`, which does not implement the `Copy` trait
...
170 | let handle = thread::spawn(move || {
| ------- value moved into closure here, in previous iteration of loop
...
340 | / self.cachedrenderedchunks
341 | | .retain(|key, _| chunksonscreen.contains(key))
| |__________________________________________________________^ value borrowed here after move
Here is the thread:
let handle = thread::spawn(move || {
let renderbytes = self.cloudslayer.render(
runtimechunksize as u32,
runtimechunksize as u32,
x,
y,
lod,
);
renderbytes
});
I have only been programming in rust for about 3 weeks now, and so I am sure there is some dumb reason why this doesn't work, but any help would be greatly appreciated.