diff options
author | ihm-tswow <ihm-ts@protonmail.com> | 2022-08-17 11:53:22 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-10-08 21:22:28 +0200 |
commit | 048089ef21e271b38e1cc99d82d13c4c4f23ebd2 (patch) | |
tree | 5f11cd51087627d4e5fa0818044f06a3295776d1 /src | |
parent | 2c0bf1c40733920e5205118327027b38dc6cbe9d (diff) |
Core/Misc: Multithread query cache loading
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
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)); } |