From bb59664df56b8b67d5bcf6339ab46a0b990aa65a Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 18 Mar 2018 12:43:55 -0400 Subject: [PATCH] Core/World: Simplified sleep calculation routine for world update thread --- Source/WorldServer/Server.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Source/WorldServer/Server.cs b/Source/WorldServer/Server.cs index d8efc437d..8c63736db 100644 --- a/Source/WorldServer/Server.cs +++ b/Source/WorldServer/Server.cs @@ -83,6 +83,10 @@ namespace WorldServer commandThread.Start(); } + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + WorldUpdateLoop(); try @@ -157,7 +161,6 @@ namespace WorldServer static void WorldUpdateLoop() { uint realPrevTime = Time.GetMSTime(); - uint prevSleepTime = 0; // used for balanced full tick time length near WORLD_SLEEP_CONST while (!Global.WorldMgr.IsStopped) { @@ -167,13 +170,11 @@ namespace WorldServer Global.WorldMgr.Update(diff); realPrevTime = realCurrTime; - if (diff <= (WorldSleep + prevSleepTime)) - { - prevSleepTime = WorldSleep + prevSleepTime - diff; - Thread.Sleep((int)prevSleepTime); - } - else - prevSleepTime = 0; + uint executionTimeDiff = Time.GetMSTimeDiffToNow(realCurrTime); + + // we know exactly how long it took to update the world, if the update took less than WORLD_SLEEP_CONST, sleep for WORLD_SLEEP_CONST - world update time + if (executionTimeDiff < WorldSleep) + Thread.Sleep((int)(WorldSleep - executionTimeDiff)); } }