/// <summary> /// Creates a new instance of the <see cref="SharedTimerScheduler"/> class. /// </summary> public SharedTimerScheduler() { m_syncRoot = new object(); m_log = Logger.CreatePublisher(typeof(SharedTimerScheduler), MessageClass.Component); m_schedulesByInterval = new Dictionary <int, SharedTimerInstance>(); m_reportStatus = new ScheduledTask(); m_reportStatus.Running += ReportStatus; m_reportStatus.Start(60 * 1000); }
public void TestMethod1() { m_task = new ScheduledTask(ThreadingMode.DedicatedBackground,ThreadPriority.Highest); m_task.Running += task_Running; m_task.Start(10); Thread.Sleep(1000); m_task.Dispose(); System.Console.WriteLine("Disposed"); }
private void RestartTimer() { long current = DateTime.UtcNow.Ticks; long subtractOffset = current - m_dayOffset.Ticks; long remainderTicks = m_period.Ticks - subtractOffset % m_period.Ticks; int delay = (int)(remainderTicks / TimeSpan.TicksPerMillisecond) + 1; if (delay < 10) { delay += (int)m_period.TotalMilliseconds; } m_timer.Start(delay); }
private void ReportStatus(object sender, EventArgs <ScheduledTaskRunningReason> e) { m_reportStatus.Start(60 * 1000); StringBuilder status = new StringBuilder(); bool warning = false; bool error = false; lock (m_syncRoot) { status.AppendLine("Shared Timer Factory Status"); foreach (KeyValuePair <int, SharedTimerInstance> item in m_schedulesByInterval) { status.AppendLine(item.Value.StatusMessage(ref warning, ref error)); item.Value.ResetStats(); } } m_log.Publish(error ? MessageLevel.Error : warning ? MessageLevel.Warning : MessageLevel.Info, MessageFlags.SystemHealth, "SharedTimerScheduler Status", status.ToString()); }
void Test(ThreadingMode mode) { const int Count = 1000000000; Stopwatch sw = new Stopwatch(); m_doWorkCount = 0; using (ScheduledTask work = new ScheduledTask(mode)) { work.Running += work_DoWork; sw.Start(); for (int x = 0; x < 1000; x++) work.Start(); sw.Stop(); } m_doWorkCount = 0; sw.Reset(); using (ScheduledTask work = new ScheduledTask(mode)) { work.Running += work_DoWork; sw.Start(); for (int x = 0; x < Count; x++) work.Start(); sw.Stop(); } Console.WriteLine(mode.ToString()); Console.WriteLine(" Fire Event Count: " + m_doWorkCount.ToString()); Console.WriteLine(" Fire Event Rate: " + (m_doWorkCount / sw.Elapsed.TotalSeconds / 1000000).ToString("0.00")); Console.WriteLine(" Total Calls Time: " + sw.Elapsed.TotalMilliseconds.ToString("0.0") + "ms"); Console.WriteLine(" Total Calls Rate: " + (Count / sw.Elapsed.TotalSeconds / 1000000).ToString("0.00")); Console.WriteLine(); }
void TestConcurrent(ThreadingMode mode) { int workCount; const int Count = 100000000; Stopwatch sw = new Stopwatch(); m_doWorkCount = 0; using (ScheduledTask work = new ScheduledTask(mode)) { work.Running += work_DoWork; sw.Start(); for (int x = 0; x < 1000; x++) work.Start(); sw.Stop(); } m_doWorkCount = 0; sw.Reset(); using (ScheduledTask work = new ScheduledTask(mode)) { work.Running += work_DoWork; sw.Start(); ThreadPool.QueueUserWorkItem(BlastStartMethod, work); ThreadPool.QueueUserWorkItem(BlastStartMethod, work); for (int x = 0; x < Count; x++) work.Start(); workCount = m_doWorkCount; sw.Stop(); Thread.Sleep(100); } Console.WriteLine(mode.ToString()); Console.WriteLine(" Fire Event Count: " + workCount.ToString()); Console.WriteLine(" Fire Event Rate: " + (workCount / sw.Elapsed.TotalSeconds / 1000000).ToString("0.00")); Console.WriteLine(" Total Calls Time: " + sw.Elapsed.TotalMilliseconds.ToString("0.0") + "ms"); Console.WriteLine(" Total Calls Rate: " + (Count / sw.Elapsed.TotalSeconds / 1000000).ToString("0.00")); Console.WriteLine(); }
/// <summary> /// Creates a new instance of the <see cref="SharedTimerScheduler"/> class. /// </summary> public SharedTimerScheduler() { m_syncRoot = new object(); m_log = Logger.CreatePublisher(typeof(SharedTimerScheduler), MessageClass.Component); m_schedulesByInterval = new Dictionary<int, SharedTimerInstance>(); m_reportStatus = new ScheduledTask(); m_reportStatus.Running += ReportStatus; m_reportStatus.Start(60 * 1000); }
/// <summary> /// Immediately executes the timer, not waiting for the elapsed interval. /// </summary> public void RunNow() { m_timer.Start(); }
/// <summary> /// Executes the action on a separate thread. /// </summary> protected override void ExecuteActionAsync() { m_task.Start(); }
/// <summary> /// Creates a <see cref="RouteMappingHighLatencyLowCpu"/> /// </summary> public RouteMappingHighLatencyLowCpu() { m_lastStatusUpdate = ShortTime.Now; m_maxPendingMeasurements = 1000; m_routeLatency = OptimizationOptions.RoutingLatency; m_batchSize = OptimizationOptions.RoutingBatchSize; m_inboundQueue = new ConcurrentQueue<List<IMeasurement>>(); m_task = new ScheduledTask(ThreadingMode.DedicatedBackground, ThreadPriority.AboveNormal); m_task.Running += m_task_Running; m_task.UnhandledException += m_task_UnhandledException; m_task.Disposing += m_task_Disposing; m_task.Start(m_routeLatency); m_onStatusMessage = x => { }; m_onProcessException = x => { }; m_globalCache = new GlobalCache(new Dictionary<IAdapter, Consumer>(), 0); RouteCount = m_globalCache.GlobalSignalLookup.Count(x => x != null); }