diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index ab666399..5a9c74f8 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -37,8 +37,10 @@ find_package(Qt${QT_VERSION_MAJOR} set(SRC_EXE_MAIN source/scwx/qt/main/main.cpp) -set(HDR_MAIN source/scwx/qt/main/main_window.hpp) -set(SRC_MAIN source/scwx/qt/main/main_window.cpp) +set(HDR_MAIN source/scwx/qt/main/application.hpp + source/scwx/qt/main/main_window.hpp) +set(SRC_MAIN source/scwx/qt/main/application.cpp + source/scwx/qt/main/main_window.cpp) set(UI_MAIN source/scwx/qt/main/main_window.ui) set(HDR_CONFIG source/scwx/qt/config/county_database.hpp source/scwx/qt/config/radar_site.hpp) diff --git a/scwx-qt/source/scwx/qt/main/application.cpp b/scwx-qt/source/scwx/qt/main/application.cpp new file mode 100644 index 00000000..0be35e59 --- /dev/null +++ b/scwx-qt/source/scwx/qt/main/application.cpp @@ -0,0 +1,48 @@ +#include +#include + +namespace scwx +{ +namespace qt +{ +namespace main +{ +namespace Application +{ + +static const std::string logPrefix_ = "scwx::qt::main::application"; +static const auto logger_ = util::Logger::Create(logPrefix_); + +static std::mutex initializationMutex_ {}; +static std::condition_variable initializationCondition_ {}; +static bool initialized_ {false}; + +void FinishInitialization() +{ + logger_->debug("Application initialization finished"); + + // Set initialized to true + std::unique_lock lock(initializationMutex_); + initialized_ = true; + lock.unlock(); + + // Notify any threads waiting for initialization + initializationCondition_.notify_all(); +} + +void WaitForInitialization() +{ + std::unique_lock lock(initializationMutex_); + + // While not yet initialized + while (!initialized_) + { + // Wait for initialization + initializationCondition_.wait(lock); + } +} + +} // namespace Application +} // namespace main +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/main/application.hpp b/scwx-qt/source/scwx/qt/main/application.hpp new file mode 100644 index 00000000..9b63ffad --- /dev/null +++ b/scwx-qt/source/scwx/qt/main/application.hpp @@ -0,0 +1,18 @@ +#pragma once + +namespace scwx +{ +namespace qt +{ +namespace main +{ +namespace Application +{ + +void FinishInitialization(); +void WaitForInitialization(); + +} // namespace Application +} // namespace main +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 42fbc871..5aff3bbf 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -3,6 +3,7 @@ #include "main_window.hpp" #include "./ui_main_window.h" +#include #include #include #include @@ -207,6 +208,8 @@ MainWindow::MainWindow(QWidget* parent) : p->ConnectMapSignals(); p->ConnectOtherSignals(); p->HandleFocusChange(p->activeMap_); + + Application::FinishInitialization(); } MainWindow::~MainWindow() diff --git a/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp b/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp index 5552e3c7..1aa7aac8 100644 --- a/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/text_event_manager.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -33,7 +34,13 @@ public: textEventMutex_ {}, warningsProvider_ {kDefaultWarningsProviderUrl} { - util::async([=]() { Refresh(); }); + util::async( + [=]() + { + main::Application::WaitForInitialization(); + logger_->debug("Start Refresh"); + Refresh(); + }); } ~Impl()