From 048089ef21e271b38e1cc99d82d13c4c4f23ebd2 Mon Sep 17 00:00:00 2001 From: ihm-tswow Date: Wed, 17 Aug 2022 11:53:22 +0200 Subject: Core/Misc: Multithread query cache loading --- src/server/game/Globals/ObjectMgr.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 21a8d8b249e..46d9cf9d9bd 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -51,6 +51,7 @@ #include "SpellScript.h" #include "StringConvert.h" #include "TemporarySummon.h" +#include "ThreadPool.h" #include "UpdateMask.h" #include "Util.h" #include "Vehicle.h" @@ -10386,30 +10387,34 @@ void ObjectMgr::InitializeQueriesData(QueryDataGroup mask) return; } + Trinity::ThreadPool pool; + // Initialize Query data for creatures if (mask & QUERY_DATA_CREATURES) for (auto& creatureTemplatePair : _creatureTemplateStore) - creatureTemplatePair.second.InitializeQueryData(); + pool.PostWork([creature = &creatureTemplatePair.second]() { creature->InitializeQueryData(); }); // Initialize Query Data for gameobjects if (mask & QUERY_DATA_GAMEOBJECTS) for (auto& gameObjectTemplatePair : _gameObjectTemplateStore) - gameObjectTemplatePair.second.InitializeQueryData(); + pool.PostWork([gobj = &gameObjectTemplatePair.second]() { gobj->InitializeQueryData(); }); // Initialize Query Data for items if (mask & QUERY_DATA_ITEMS) for (auto& itemTemplatePair : _itemTemplateStore) - itemTemplatePair.second.InitializeQueryData(); + pool.PostWork([item = &itemTemplatePair.second]() { item->InitializeQueryData(); }); // Initialize Query Data for quests if (mask & QUERY_DATA_QUESTS) for (auto& questTemplatePair : _questTemplates) - questTemplatePair.second.InitializeQueryData(); + pool.PostWork([quest = &questTemplatePair.second]() { quest->InitializeQueryData(); }); // Initialize Quest POI data if (mask & QUERY_DATA_POIS) for (auto& poiWrapperPair : _questPOIStore) - poiWrapperPair.second.InitializeQueryData(); + pool.PostWork([poi = &poiWrapperPair.second]() { poi->InitializeQueryData(); }); + + pool.Join(); TC_LOG_INFO("server.loading", ">> Initialized query cache data in %u ms", GetMSTimeDiffToNow(oldMSTime)); } -- cgit v1.2.3