std::thread helper1(GenerateDistanceList,this); helper1.detach();
Uhm... so now that you just went ahead and detached your thread, how are you ever going to find out if the thread is actually finished before you just cross your fingers and try to use the new star system?
When it comes to multi-threading, you can't just go and randomly make assumptions like "I'm sure the generation will be done in time". I've seen weird situation where threads wouldn't get to run for several seconds. At the very least, you should make sure to call join() before trying to enter the new system. That means you can't just detach and hope for the best. Which means you need to start thinking about who should own the thread object, because a function local variable won't do.