Core/World: Simplified sleep calculation routine for world update thread
This commit is contained in:
@@ -83,6 +83,10 @@ namespace WorldServer
|
|||||||
commandThread.Start();
|
commandThread.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GC.Collect();
|
||||||
|
GC.WaitForPendingFinalizers();
|
||||||
|
GC.Collect();
|
||||||
|
|
||||||
WorldUpdateLoop();
|
WorldUpdateLoop();
|
||||||
|
|
||||||
try
|
try
|
||||||
@@ -157,7 +161,6 @@ namespace WorldServer
|
|||||||
static void WorldUpdateLoop()
|
static void WorldUpdateLoop()
|
||||||
{
|
{
|
||||||
uint realPrevTime = Time.GetMSTime();
|
uint realPrevTime = Time.GetMSTime();
|
||||||
uint prevSleepTime = 0; // used for balanced full tick time length near WORLD_SLEEP_CONST
|
|
||||||
|
|
||||||
while (!Global.WorldMgr.IsStopped)
|
while (!Global.WorldMgr.IsStopped)
|
||||||
{
|
{
|
||||||
@@ -167,13 +170,11 @@ namespace WorldServer
|
|||||||
Global.WorldMgr.Update(diff);
|
Global.WorldMgr.Update(diff);
|
||||||
realPrevTime = realCurrTime;
|
realPrevTime = realCurrTime;
|
||||||
|
|
||||||
if (diff <= (WorldSleep + prevSleepTime))
|
uint executionTimeDiff = Time.GetMSTimeDiffToNow(realCurrTime);
|
||||||
{
|
|
||||||
prevSleepTime = WorldSleep + prevSleepTime - diff;
|
// 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
|
||||||
Thread.Sleep((int)prevSleepTime);
|
if (executionTimeDiff < WorldSleep)
|
||||||
}
|
Thread.Sleep((int)(WorldSleep - executionTimeDiff));
|
||||||
else
|
|
||||||
prevSleepTime = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user