diff --git a/src/MaaCore/Config/ResourceLoader.cpp b/src/MaaCore/Config/ResourceLoader.cpp index d814e3106a..36b992c43d 100644 --- a/src/MaaCore/Config/ResourceLoader.cpp +++ b/src/MaaCore/Config/ResourceLoader.cpp @@ -46,14 +46,14 @@ void asst::ResourceLoader::load_thread_func() } } -void asst::ResourceLoader::add_load_queue(std::shared_ptr res_ptr, const std::filesystem::path& path) +void asst::ResourceLoader::add_load_queue(AbstractResource& res, const std::filesystem::path& path) { - if (!res_ptr || !std::filesystem::exists(path)) { + if (!std::filesystem::exists(path)) { return; } std::unique_lock lock(m_load_mutex); - m_load_queue.emplace_back(std::move(res_ptr), path); + m_load_queue.emplace_back(&res, path); m_load_cv.notify_all(); } @@ -92,10 +92,9 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path) // DEBUG 模式下这里同步加载,并检查返回值的,方便排查问题 #define AsyncLoadConfig(Config, Filename) LoadResourceAndCheckRet(Config, Filename) #else -#define AsyncLoadConfig(Config, Filename) \ - { \ - auto res_ptr = std::make_shared(); \ - add_load_queue(res_ptr, path / Filename); \ +#define AsyncLoadConfig(Config, Filename) \ + { \ + add_load_queue(SingletonHolder::get_instance(), path / Filename); \ } #endif // ASST_DEBUG diff --git a/src/MaaCore/Config/ResourceLoader.h b/src/MaaCore/Config/ResourceLoader.h index 9e5f4d332a..da461a3f8b 100644 --- a/src/MaaCore/Config/ResourceLoader.h +++ b/src/MaaCore/Config/ResourceLoader.h @@ -50,14 +50,14 @@ namespace asst return load_resource(templ_dir); } - void add_load_queue(std::shared_ptr res_ptr, const std::filesystem::path& path); + void add_load_queue(AbstractResource& res, const std::filesystem::path& path); private: bool m_loaded = false; // only for async load bool m_load_thread_exit = false; - std::deque, std::filesystem::path>> m_load_queue; + std::deque> m_load_queue; std::mutex m_load_mutex; std::condition_variable m_load_cv; std::thread m_load_thread;