From 571dace83bc4ffb4228b1d8f3510d77fff06df06 Mon Sep 17 00:00:00 2001 From: Martin Piatka Date: Wed, 17 Aug 2022 15:56:23 +0200 Subject: [PATCH] GUI: vuMeter: Improve reconnection logic --- gui/QT/widget/vuMeterWidget.cpp | 11 ++++------- gui/QT/widget/vuMeterWidget.hpp | 3 +++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gui/QT/widget/vuMeterWidget.cpp b/gui/QT/widget/vuMeterWidget.cpp index 9e5197817..f787fb441 100644 --- a/gui/QT/widget/vuMeterWidget.cpp +++ b/gui/QT/widget/vuMeterWidget.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -11,16 +12,12 @@ namespace{ -ug_connection *connectLoop(int port){ - const int max_tries = 2; - int tries = 0; - +ug_connection *connectLoop(int port, const std::atomic& should_exit){ ug_connection *connection = nullptr; connection = ug_control_connection_init(port); - while(!connection && tries < max_tries){ + while(!connection && !should_exit){ std::this_thread::sleep_for (std::chrono::seconds(2)); connection = ug_control_connection_init(port); - tries++; } return connection; @@ -192,7 +189,7 @@ void VuMeterWidget::connect_ug(){ c = future_connection.get(); } } else { - future_connection = std::async(std::launch::async, connectLoop, port); + future_connection = std::async(std::launch::async, connectLoop, port, std::ref(should_exit)); } if(!c) diff --git a/gui/QT/widget/vuMeterWidget.hpp b/gui/QT/widget/vuMeterWidget.hpp index 0b7764fd3..01ff96352 100644 --- a/gui/QT/widget/vuMeterWidget.hpp +++ b/gui/QT/widget/vuMeterWidget.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -31,6 +32,7 @@ public: } ~VuMeterWidget(){ + should_exit = true; ug_control_cleanup(); } @@ -41,6 +43,7 @@ private: QTimer timer; std::unique_ptr connection; std::future future_connection; + std::atomic should_exit = false; int port;