diff --git a/Server/Item.cs b/Server/Item.cs index 003bf2af4..95e8abba3 100644 --- a/Server/Item.cs +++ b/Server/Item.cs @@ -2848,6 +2848,8 @@ namespace Server m_DeltaQueue.Add( this ); } + + Core.Set(); } public void RemDelta( ItemDelta flags ) diff --git a/Server/Main.cs b/Server/Main.cs index 8b0603f03..be726be52 100644 --- a/Server/Main.cs +++ b/Server/Main.cs @@ -330,6 +330,9 @@ namespace Server Console.WriteLine( "done" ); } + private static AutoResetEvent m_Signal = new AutoResetEvent( true ); + public static void Set() { m_Signal.Set(); } + public static void Main( string[] args ) { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( CurrentDomain_UnhandledException ); @@ -439,7 +442,7 @@ namespace Server while( !m_Closing ) { - Thread.Sleep( m_MultiProcessor ? 0 : 1 ); + m_Signal.WaitOne(); Mobile.ProcessDeltaQueue(); Item.ProcessDeltaQueue(); diff --git a/Server/Mobile.cs b/Server/Mobile.cs index 500597a6b..688085f83 100644 --- a/Server/Mobile.cs +++ b/Server/Mobile.cs @@ -9642,6 +9642,8 @@ namespace Server m_DeltaQueue.Enqueue( this ); } + + Core.Set(); } public Direction GetDirectionTo( int x, int y ) diff --git a/Server/Network/Listener.cs b/Server/Network/Listener.cs index b00bc7b90..1824fc90e 100644 --- a/Server/Network/Listener.cs +++ b/Server/Network/Listener.cs @@ -153,6 +153,8 @@ namespace Server.Network { IAsyncResult res = listener.BeginAccept( m_OnAccept, listener ); } + + Core.Set(); } public Socket[] Slice() diff --git a/Server/Network/MessagePump.cs b/Server/Network/MessagePump.cs index 23f6ce1b7..f2605af92 100644 --- a/Server/Network/MessagePump.cs +++ b/Server/Network/MessagePump.cs @@ -85,6 +85,8 @@ namespace Server.Network { lock ( this ) m_Queue.Enqueue( ns ); + + Core.Set(); } public void Slice() diff --git a/Server/Persistence/BinaryMemoryWriter.cs b/Server/Persistence/BinaryMemoryWriter.cs index adad5c1e8..aaffb0cf1 100644 --- a/Server/Persistence/BinaryMemoryWriter.cs +++ b/Server/Persistence/BinaryMemoryWriter.cs @@ -24,7 +24,7 @@ using System.Collections.Generic; using System.Text; namespace Server { - public class BinaryMemoryWriter : BinaryFileWriter { + public sealed class BinaryMemoryWriter : BinaryFileWriter { private MemoryStream stream; protected override int BufferSize { diff --git a/Server/Serialization.cs b/Server/Serialization.cs index a8481b79d..429881192 100644 --- a/Server/Serialization.cs +++ b/Server/Serialization.cs @@ -789,7 +789,7 @@ namespace Server } } - public class BinaryFileReader : GenericReader + public sealed class BinaryFileReader : GenericReader { private BinaryReader m_File; @@ -1144,7 +1144,7 @@ namespace Server } } - public class AsyncWriter : GenericWriter + public sealed class AsyncWriter : GenericWriter { private static int m_ThreadCount = 0; public static int ThreadCount { get { return m_ThreadCount; } } diff --git a/Server/Timer.cs b/Server/Timer.cs index a923cafec..aa5adb83a 100644 --- a/Server/Timer.cs +++ b/Server/Timer.cs @@ -359,6 +359,7 @@ namespace Server public static void Change( Timer t, int newIndex, bool isAdd ) { m_ChangeQueue.Enqueue( TimerChangeEntry.GetInstance( t, newIndex, isAdd ) ); + m_Signal.Set(); } public static void AddTimer( Timer t ) @@ -407,18 +408,23 @@ namespace Server } } + private static AutoResetEvent m_Signal = new AutoResetEvent( true ); + public void TimerMain() { DateTime now; int i, j; + bool loaded; while ( !Core.Closing ) { - Thread.Sleep( 10 ); + m_Signal.WaitOne( 10, false ); ProcessChangeQueue(); - for (i=0;i= t.m_Count) ) { @@ -448,6 +456,9 @@ namespace Server } } } + + if ( loaded ) + Core.Set(); } } }