From 48ac3acc84274fe8d0bf3af30fb47c6729b07147 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Tue, 28 Oct 2014 22:19:24 +0100 Subject: QtBiomeVisualiser: Added quick shutdown to region loaders. Now the app shuts down immediately even if regions are queued for loading. --- Tools/QtBiomeVisualiser/MainWindow.cpp | 3 ++- Tools/QtBiomeVisualiser/RegionLoader.cpp | 10 ++++++++++ Tools/QtBiomeVisualiser/RegionLoader.h | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Tools/QtBiomeVisualiser/MainWindow.cpp b/Tools/QtBiomeVisualiser/MainWindow.cpp index 4437d9ceb..e6e951b60 100644 --- a/Tools/QtBiomeVisualiser/MainWindow.cpp +++ b/Tools/QtBiomeVisualiser/MainWindow.cpp @@ -14,6 +14,7 @@ #include "src/StringCompression.h" #include "src/WorldStorage/FastNBT.h" #include "GeneratorSetup.h" +#include "RegionLoader.h" @@ -70,7 +71,7 @@ MainWindow::MainWindow(QWidget * parent) : MainWindow::~MainWindow() { - + RegionLoader::shutdown(); } diff --git a/Tools/QtBiomeVisualiser/RegionLoader.cpp b/Tools/QtBiomeVisualiser/RegionLoader.cpp index 771c1bbac..2a318098b 100644 --- a/Tools/QtBiomeVisualiser/RegionLoader.cpp +++ b/Tools/QtBiomeVisualiser/RegionLoader.cpp @@ -7,6 +7,12 @@ +volatile bool RegionLoader::m_IsShuttingDown = false; + + + + + RegionLoader::RegionLoader(int a_RegionX, int a_RegionZ, RegionPtr a_Region, ChunkSourcePtr a_ChunkSource) : m_RegionX(a_RegionX), m_RegionZ(a_RegionZ), @@ -27,6 +33,10 @@ void RegionLoader::run() for (int x = 0; x < 32; x++) { m_ChunkSource->getChunkBiomes(m_RegionX * 32 + x, m_RegionZ * 32 + z, m_Region->getRelChunk(x, z)); + if (m_IsShuttingDown) + { + return; + } } } m_Region->m_IsValid = true; diff --git a/Tools/QtBiomeVisualiser/RegionLoader.h b/Tools/QtBiomeVisualiser/RegionLoader.h index 5a993f5ca..6bbb4aa60 100644 --- a/Tools/QtBiomeVisualiser/RegionLoader.h +++ b/Tools/QtBiomeVisualiser/RegionLoader.h @@ -28,6 +28,9 @@ public: RegionLoader(int a_RegionX, int a_RegionZ, RegionPtr a_Region, ChunkSourcePtr a_ChunkSource); virtual ~RegionLoader() {} + /** Signals to all loaders that the app is shutting down and the loading should be aborted. */ + static void shutdown() { m_IsShuttingDown = true; } + signals: void loaded(int a_RegionX, int a_RegionZ); @@ -43,6 +46,9 @@ private: /** The chunk source to be used for individual chunks within the region. */ ChunkSourcePtr m_ChunkSource; + + /** Flag that is set upon app exit to terminate the queued loaders faster. */ + static volatile bool m_IsShuttingDown; }; -- cgit v1.2.3