예제 #1
0
 protected LocalScheduler()
 {
     timer_clock_monitor = new PeriodicTimerSystemClockMonitor(TimeSpan.FromSeconds(10));
     timer_clock_monitor.SystemClockChanged += (o, e) => {
         var future = new List <ScheduledItemImpl <DateTimeOffset> > ();
         foreach (var task in tasks)
         {
             task.Cancel();
             future.Add(task.Reschedule(task.DueTime + (e.NewTime - e.OldTime)));
         }
         tasks.AddRange(future);
     };
 }
예제 #2
0
        private static void PeriodicSystemClockChangeMonitor_Callback()
        {
            var provider = new FakeClockPlatformEnlightenmentProvider();

            PlatformEnlightenmentProvider.Current = provider;

            var clock = (FakeClock)provider.GetService <ISystemClock>();

            clock._now = new DateTimeOffset(2012, 4, 26, 12, 0, 0, TimeSpan.Zero);

            var cal = (FakeClockCAL)provider.GetService <IConcurrencyAbstractionLayer>();

            var period = TimeSpan.FromSeconds(1);
            var ptscm  = new PeriodicTimerSystemClockMonitor(period);

            var delta = TimeSpan.Zero;
            var n     = 0;
            var h     = new EventHandler <SystemClockChangedEventArgs>((o, e) =>
            {
                delta = e.NewTime - e.OldTime;
                n++;
            });

            ptscm.SystemClockChanged += h;

            Assert.NotNull(cal._action);
            Assert.True(cal._period == period);
            Assert.Equal(0, n);

            clock._now += period;
            cal._action();
            Assert.Equal(0, n);

            clock._now += period;
            cal._action();
            Assert.Equal(0, n);

            var diff1 = TimeSpan.FromSeconds(3);

            clock._now += period + diff1;
            cal._action();
            Assert.Equal(1, n);
            Assert.True(delta == diff1);

            clock._now += period;
            cal._action();
            Assert.Equal(1, n);

            clock._now += period;
            cal._action();
            Assert.Equal(1, n);

            var diff2 = TimeSpan.FromSeconds(-5);

            clock._now += period + diff2;
            cal._action();
            Assert.Equal(2, n);
            Assert.True(delta == diff2);

            clock._now += period;
            cal._action();
            Assert.Equal(2, n);

            ptscm.SystemClockChanged -= h;

            Assert.Null(cal._action);
        }