mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 16:00:08 +00:00
Use boost::asio for asynchronous processing
This commit is contained in:
parent
09064c0be0
commit
bb7793d309
4 changed files with 57 additions and 3 deletions
|
|
@ -3,30 +3,66 @@
|
||||||
#include <scwx/qt/manager/resource_manager.hpp>
|
#include <scwx/qt/manager/resource_manager.hpp>
|
||||||
#include <scwx/qt/manager/settings_manager.hpp>
|
#include <scwx/qt/manager/settings_manager.hpp>
|
||||||
#include <scwx/util/logger.hpp>
|
#include <scwx/util/logger.hpp>
|
||||||
|
#include <scwx/util/threads.hpp>
|
||||||
|
|
||||||
#include <aws/core/Aws.h>
|
#include <aws/core/Aws.h>
|
||||||
|
#include <boost/asio.hpp>
|
||||||
#include <spdlog/spdlog.h>
|
#include <spdlog/spdlog.h>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
|
static const std::string logPrefix_ = "scwx::main";
|
||||||
|
static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
|
// Initialize logger
|
||||||
scwx::util::Logger::Initialize();
|
scwx::util::Logger::Initialize();
|
||||||
spdlog::set_level(spdlog::level::debug);
|
spdlog::set_level(spdlog::level::debug);
|
||||||
|
|
||||||
QCoreApplication::setApplicationName("Supercell Wx");
|
QCoreApplication::setApplicationName("Supercell Wx");
|
||||||
|
|
||||||
|
// Start the io_context main loop
|
||||||
|
boost::asio::io_context& ioContext = scwx::util::io_context();
|
||||||
|
auto work = boost::asio::make_work_guard(ioContext);
|
||||||
|
boost::asio::thread_pool threadPool {4};
|
||||||
|
boost::asio::post(threadPool,
|
||||||
|
[&]()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ioContext.run();
|
||||||
|
break; // run() exited normally
|
||||||
|
}
|
||||||
|
catch (std::exception& ex)
|
||||||
|
{
|
||||||
|
// Log exception and continue
|
||||||
|
logger_->error(ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Initialize AWS SDK
|
||||||
Aws::SDKOptions awsSdkOptions;
|
Aws::SDKOptions awsSdkOptions;
|
||||||
Aws::InitAPI(awsSdkOptions);
|
Aws::InitAPI(awsSdkOptions);
|
||||||
|
|
||||||
|
// Initialize application
|
||||||
scwx::qt::config::RadarSite::Initialize();
|
scwx::qt::config::RadarSite::Initialize();
|
||||||
scwx::qt::manager::SettingsManager::Initialize();
|
scwx::qt::manager::SettingsManager::Initialize();
|
||||||
scwx::qt::manager::ResourceManager::PreLoad();
|
scwx::qt::manager::ResourceManager::PreLoad();
|
||||||
|
|
||||||
|
// Run Qt main loop
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
scwx::qt::main::MainWindow w;
|
scwx::qt::main::MainWindow w;
|
||||||
w.show();
|
w.show();
|
||||||
int result = a.exec();
|
int result = a.exec();
|
||||||
|
|
||||||
|
// Gracefully stop the io_context main loop
|
||||||
|
work.reset();
|
||||||
|
threadPool.join();
|
||||||
|
|
||||||
|
// Shutdown AWS SDK
|
||||||
Aws::ShutdownAPI(awsSdkOptions);
|
Aws::ShutdownAPI(awsSdkOptions);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
#include <future>
|
#include <boost/asio/io_context.hpp>
|
||||||
|
#include <boost/asio/post.hpp>
|
||||||
|
|
||||||
namespace scwx
|
namespace scwx
|
||||||
{
|
{
|
||||||
namespace util
|
namespace util
|
||||||
{
|
{
|
||||||
|
|
||||||
|
boost::asio::io_context& io_context();
|
||||||
|
|
||||||
template<class F>
|
template<class F>
|
||||||
void async(F&& f)
|
void async(F&& f)
|
||||||
{
|
{
|
||||||
auto future = std::make_shared<std::future<void>>();
|
boost::asio::post(io_context(), f);
|
||||||
*future = std::async(std::launch::async, [future, f]() { f(); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace util
|
} // namespace util
|
||||||
|
|
|
||||||
15
wxdata/source/scwx/util/threads.cpp
Normal file
15
wxdata/source/scwx/util/threads.cpp
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <scwx/util/threads.hpp>
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace util
|
||||||
|
{
|
||||||
|
|
||||||
|
boost::asio::io_context& io_context()
|
||||||
|
{
|
||||||
|
static boost::asio::io_context ioContext {};
|
||||||
|
return ioContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace util
|
||||||
|
} // namespace scwx
|
||||||
|
|
@ -54,6 +54,7 @@ set(SRC_UTIL source/scwx/util/float.cpp
|
||||||
source/scwx/util/rangebuf.cpp
|
source/scwx/util/rangebuf.cpp
|
||||||
source/scwx/util/streams.cpp
|
source/scwx/util/streams.cpp
|
||||||
source/scwx/util/time.cpp
|
source/scwx/util/time.cpp
|
||||||
|
source/scwx/util/threads.cpp
|
||||||
source/scwx/util/vectorbuf.cpp)
|
source/scwx/util/vectorbuf.cpp)
|
||||||
set(HDR_WSR88D include/scwx/wsr88d/ar2v_file.hpp
|
set(HDR_WSR88D include/scwx/wsr88d/ar2v_file.hpp
|
||||||
include/scwx/wsr88d/level3_file.hpp
|
include/scwx/wsr88d/level3_file.hpp
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue