using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; namespace StgSharp { public static partial class StgSharp { private static Stopwatch mainProvider = new Stopwatch(); private static List subscriberList = new List(); private static Thread timeProvideThread; private static long accuracy; private static void ProvideTime() { long totalMS, previousFrameMS = 0, internalFrequncy = Stopwatch.Frequency; lock (mainProvider) { mainProvider.Restart(); } while (mainProvider.IsRunning) { totalMS = mainProvider.ElapsedTicks / (internalFrequncy / (1000L * 1000L)); foreach (TimeProvider subscriber in subscriberList) { subscriber.CheckTime(totalMS); } } } [MethodImpl(MethodImplOptions.NoOptimization)] public static void TimerActivate(int maxFrameUpdateSensitiveTimeProviderCount) { if (!mainProvider.IsRunning) { mainProvider.Start(); //speed test long totalMS, previousSecondMS = 0, internalFrequncy = Stopwatch.Frequency; for (int i = 0; i < 100; i++) { totalMS = mainProvider.ElapsedTicks / (internalFrequncy / (1000L * 1000L)); for (int t = 0; t < 10; t++) { if (totalMS < 1000) { subscriberList.Add(new TimeProvider(100L)); } } } mainProvider.Stop(); subscriberList.Clear(); totalMS = (mainProvider.ElapsedTicks / (internalFrequncy / (1000L * 1000L))) / 100L; accuracy = totalMS * 2 / 3; mainProvider.Reset(); timeProvideThread = new Thread(new ThreadStart(ProvideTime)); timeProvideThread.Start(); } } public static void SubscribeTimeProvider(TimeProvider provider) { } public static void TimerDeactivate() { lock (mainProvider) { mainProvider.Stop(); } } } }