diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp index f55c2fb2..6f13f3fe 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp @@ -72,7 +72,7 @@ public: SetProduct(product); } - ~Level2ProductViewImpl() = default; + ~Level2ProductViewImpl() { threadPool_.join(); }; void ComputeCoordinates(std::shared_ptr radarData); @@ -82,6 +82,8 @@ public: Level2ProductView* self_; + boost::asio::thread_pool threadPool_ {1u}; + common::Level2Product product_; wsr88d::rda::DataBlockType dataBlockType_; @@ -156,6 +158,11 @@ void Level2ProductView::DisconnectRadarProductManager() nullptr); } +boost::asio::thread_pool& Level2ProductView::thread_pool() +{ + return p->threadPool_; +} + const std::vector& Level2ProductView::color_table() const { diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.hpp b/scwx-qt/source/scwx/qt/view/level2_product_view.hpp index 507e705d..700cd591 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.hpp @@ -53,6 +53,8 @@ public: std::shared_ptr radarProductManager); protected: + boost::asio::thread_pool& thread_pool() override; + void ConnectRadarProductManager() override; void DisconnectRadarProductManager() override; void UpdateColorTable() override; diff --git a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp index 9ec04d0b..13174135 100644 --- a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp @@ -41,13 +41,15 @@ public: { coordinates_.resize(kMaxCoordinates_); } - ~Level3RadialViewImpl() = default; + ~Level3RadialViewImpl() { threadPool_.join(); }; void ComputeCoordinates( std::shared_ptr radialData); Level3RadialView* self_; + boost::asio::thread_pool threadPool_ {1u}; + std::vector coordinates_ {}; std::vector vertices_ {}; std::vector dataMoments8_ {}; @@ -73,6 +75,11 @@ Level3RadialView::~Level3RadialView() std::unique_lock sweepLock {sweep_mutex()}; } +boost::asio::thread_pool& Level3RadialView::thread_pool() +{ + return p->threadPool_; +} + float Level3RadialView::range() const { return p->range_; diff --git a/scwx-qt/source/scwx/qt/view/level3_radial_view.hpp b/scwx-qt/source/scwx/qt/view/level3_radial_view.hpp index a971941e..c6852eb1 100644 --- a/scwx-qt/source/scwx/qt/view/level3_radial_view.hpp +++ b/scwx-qt/source/scwx/qt/view/level3_radial_view.hpp @@ -37,6 +37,9 @@ public: Create(const std::string& product, std::shared_ptr radarProductManager); +protected: + boost::asio::thread_pool& thread_pool() override; + protected slots: void ComputeSweep() override; diff --git a/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp b/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp index 01bc3d54..5dfd9956 100644 --- a/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp @@ -30,7 +30,9 @@ public: latitude_ {}, longitude_ {}, range_ {}, vcp_ {}, sweepTime_ {} { } - ~Level3RasterViewImpl() = default; + ~Level3RasterViewImpl() { threadPool_.join(); }; + + boost::asio::thread_pool threadPool_ {1u}; std::vector vertices_; std::vector dataMoments8_; @@ -56,6 +58,11 @@ Level3RasterView::~Level3RasterView() std::unique_lock sweepLock {sweep_mutex()}; } +boost::asio::thread_pool& Level3RasterView::thread_pool() +{ + return p->threadPool_; +} + float Level3RasterView::range() const { return p->range_; diff --git a/scwx-qt/source/scwx/qt/view/level3_raster_view.hpp b/scwx-qt/source/scwx/qt/view/level3_raster_view.hpp index 6b852f32..eb60fe80 100644 --- a/scwx-qt/source/scwx/qt/view/level3_raster_view.hpp +++ b/scwx-qt/source/scwx/qt/view/level3_raster_view.hpp @@ -37,6 +37,9 @@ public: Create(const std::string& product, std::shared_ptr radarProductManager); +protected: + boost::asio::thread_pool& thread_pool() override; + protected slots: void ComputeSweep() override; diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp index 934922e3..7651a14c 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp @@ -35,9 +35,7 @@ public: radarProductManager_ {radarProductManager} { } - ~RadarProductViewImpl() { threadPool_.join(); } - - boost::asio::thread_pool threadPool_ {1}; + ~RadarProductViewImpl() {} bool initialized_; std::mutex sweepMutex_; @@ -123,7 +121,7 @@ void RadarProductView::SelectTime(std::chrono::system_clock::time_point time) void RadarProductView::Update() { - boost::asio::post(p->threadPool_, [this]() { ComputeSweep(); }); + boost::asio::post(thread_pool(), [this]() { ComputeSweep(); }); } bool RadarProductView::IsInitialized() const diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp index dd92db58..b36ceffe 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp @@ -11,6 +11,7 @@ #include #include +#include namespace scwx { @@ -66,6 +67,8 @@ public: std::chrono::system_clock::time_point GetSelectedTime() const; protected: + virtual boost::asio::thread_pool& thread_pool() = 0; + virtual void ConnectRadarProductManager() = 0; virtual void DisconnectRadarProductManager() = 0; virtual void UpdateColorTable() = 0;