Example #1
0
 private static void SetAdvanceImmediatelyRecursively(TimeSourceBase source, bool val)
 {
     source.AdvanceImmediately = val;
     foreach (var sink in source.Sinks.OfType <TimeSourceBase>())
     {
         SetAdvanceImmediatelyRecursively(sink, val);
     }
 }
Example #2
0
 private static void SetSerialExecutionRecursively(TimeSourceBase source, bool val)
 {
     source.ExecuteInSerial = val;
     foreach (var sink in source.Sinks.OfType <TimeSourceBase>())
     {
         SetSerialExecutionRecursively(sink, val);
     }
 }
Example #3
0
 private static void SetPerformanceRecursively(TimeSourceBase source, double p)
 {
     source.Performance = p;
     foreach (var sink in source.Sinks.OfType <TimeSourceBase>())
     {
         SetPerformanceRecursively(sink, p);
     }
 }
Example #4
0
 private static void SetQuantumRecursively(TimeSourceBase source, TimeInterval quantum)
 {
     source.Quantum = quantum;
     foreach (var sink in source.Sinks.OfType <TimeSourceBase>())
     {
         SetQuantumRecursively(sink, quantum);
     }
 }
Example #5
0
        // note: this method currently implements
        // the not-sooner-than behaviour which means
        // that it's guaranteed the timeout event
        // will not trigger earlier than current time
        // plus `virtualMilliseconds` (except for the
        // serialization, in which case the event will
        // be triggered immediately);
        // technically the event is triggered in the synchronization phase,
        // so it might be delayed maximally by the size of the quantum
        public static TimeoutEvent EnqueueTimeoutEvent(this TimeSourceBase timeSource, ulong virtualMilliseconds)
        {
            var timeoutEvent = new TimeoutEvent();
            var when         = timeSource.ElapsedVirtualTime + TimeInterval.FromMilliseconds(virtualMilliseconds);

            timeSource.ExecuteInSyncedState(_ =>
            {
                timeoutEvent.Trigger();
            }, new TimeStamp(when, timeSource.Domain));

            return(timeoutEvent);
        }