From f9a49043c35e73fc2d4ffb3ed9b39c33849c43b3 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 15 Dec 2023 21:14:17 +0800 Subject: fix: slove threading and memory issues --- src/core/module/ModuleManager.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/core/module/ModuleManager.h') diff --git a/src/core/module/ModuleManager.h b/src/core/module/ModuleManager.h index 1b1133da..ace71c13 100644 --- a/src/core/module/ModuleManager.h +++ b/src/core/module/ModuleManager.h @@ -28,8 +28,10 @@ #pragma once +#include #include +#include "core/function/basic/GpgFunctionObject.h" #include "core/module/Event.h" namespace GpgFrontend::Thread { @@ -54,15 +56,13 @@ using Namespace = std::string; using Key = std::string; using LPCallback = std::function; -class GPGFRONTEND_CORE_EXPORT ModuleManager : public QObject { - Q_OBJECT +class GPGFRONTEND_CORE_EXPORT ModuleManager + : public SingletonFunctionObject { public: - ModuleManager(); + explicit ModuleManager(int channel); virtual ~ModuleManager() override; - static auto GetInstance() -> ModuleMangerPtr; - void RegisterModule(ModulePtr); auto IsModuleActivated(ModuleIdentifier) -> bool; @@ -91,23 +91,23 @@ class GPGFRONTEND_CORE_EXPORT ModuleManager : public QObject { template void RegisterModule(Args&&... args) { - ModuleManager::GetInstance()->RegisterModule( + ModuleManager::GetInstance().RegisterModule( GpgFrontend::SecureCreateSharedObject(std::forward(args)...)); } template void RegisterAndActivateModule(Args&&... args) { - auto manager = ModuleManager::GetInstance(); + auto& manager = ModuleManager::GetInstance(); auto module = GpgFrontend::SecureCreateSharedObject(std::forward(args)...); - manager->RegisterModule(module); - manager->ActiveModule(module->GetModuleIdentifier()); + manager.RegisterModule(module); + manager.ActiveModule(module->GetModuleIdentifier()); } template void TriggerEvent(const EventIdentifier& event_id, Args&&... args, Event::EventCallback e_cb = nullptr) { - ModuleManager::GetInstance()->TriggerEvent( + ModuleManager::GetInstance().TriggerEvent( std::move(MakeEvent(event_id, std::forward(args)..., e_cb))); } @@ -156,7 +156,7 @@ template auto RetrieveRTValueTyped(const std::string& namespace_, const std::string& key) -> std::optional { auto any_value = - ModuleManager::GetInstance()->RetrieveRTValue(namespace_, key); + ModuleManager::GetInstance().RetrieveRTValue(namespace_, key); if (any_value && any_value->type() == typeid(T)) { return std::any_cast(*any_value); } @@ -168,7 +168,7 @@ auto RetrieveRTValueTypedOrDefault(const std::string& namespace_, const std::string& key, const T& defaultValue) -> T { auto any_value = - ModuleManager::GetInstance()->RetrieveRTValue(namespace_, key); + ModuleManager::GetInstance().RetrieveRTValue(namespace_, key); if (any_value && any_value->type() == typeid(T)) { return std::any_cast(*any_value); } -- cgit v1.2.3