diff options
author | ihm-tswow <ihm-ts@protonmail.com> | 2022-08-17 11:53:22 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-10-13 11:57:23 +0200 |
commit | a8f1ab32676dd476d9d08f24eb51028a6e404f9d (patch) | |
tree | 5b71a526409be5570f0fabee3d802711653e79d3 /src | |
parent | f59580dc6c95a4190aaa6bf8e7172ac22b2d7cdb (diff) |
Core/Misc: Multithread query cache loading
(cherry picked from commit 048089ef21e271b38e1cc99d82d13c4c4f23ebd2)
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 08763fe8aeb..881a0f87b88 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -61,6 +61,7 @@ #include "StringConvert.h" #include "TemporarySummon.h" #include "TerrainMgr.h" +#include "ThreadPool.h" #include "Timer.h" #include "TransportMgr.h" #include "Vehicle.h" @@ -10904,25 +10905,29 @@ 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 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& poiPair : _questPOIStore) - poiPair.second.InitializeQueryData(); + for (auto& poiWrapperPair : _questPOIStore) + pool.PostWork([poi = &poiWrapperPair.second]() { poi->InitializeQueryData(); }); + + pool.Join(); TC_LOG_INFO("server.loading", ">> Initialized query cache data in %u ms", GetMSTimeDiffToNow(oldMSTime)); } |