threads: allow for proper shutdown

using `if` instead of `while` avoids the need to wait for the queue to empty to shutdown the thread
pull/10/head
EmaMaker 2023-10-03 22:01:32 +02:00
parent f6f4057109
commit ca043bac68
1 changed files with 10 additions and 1 deletions

View File

@ -95,8 +95,9 @@ namespace chunkmanager
void generate(){
while(should_run){
ChunkPQEntry entry;
while(chunks_to_generate_queue.try_pop(entry)) generateChunk(entry.first);
if(chunks_to_generate_queue.try_pop(entry)) generateChunk(entry.first);
}
chunks_to_generate_queue.clear();
}
// Method for chunk meshing thread(s)
@ -111,6 +112,7 @@ namespace chunkmanager
}
}
}
chunks_to_mesh_queue.clear();
}
oneapi::tbb::concurrent_queue<Chunk::Chunk*> chunks_todelete;
@ -185,10 +187,16 @@ namespace chunkmanager
void stop() {
should_run=false;
std::cout << "Waiting for secondary threads to shut down" << std::endl;
update_thread.join();
std::cout << "Update thread has terminated" << std::endl;
gen_thread.join();
std::cout << "Generation thread has terminated" << std::endl;
mesh_thread.join();
std::cout << "Meshing thread has terminated" << std::endl;
}
void destroy(){
/*for(const auto& n : chunks){
delete n.second;
@ -314,3 +322,4 @@ namespace chunkmanager
}
}
};