/// <returns> /// The simulated time. /// TimeSpan.Zero if no time progress was achieved due to delta events. /// TimeSpan.MinValue if no events were available. /// </returns> private TimeSpan RunSignalAssignmentPhase(bool progressTime) { _phase = SchedulerPhase.SignalAssignment; TimeSpan simulatedTime = TimeSpan.Zero; while (progressTime && _deltaEvents.Count == 0) { TimeSpan timespan; if (_timeQueue.TryNextEventTime(out timespan)) { OnSimulationTimeProgress(timespan); simulatedTime += timespan; } else { _phase = SchedulerPhase.Idle; return(TimeSpan.MinValue); } } while (_deltaEvents.Count > 0) { SignalEventItem item = _deltaEvents.Pop(); if (item.SetValue(item.NewValue)) { _eventSignals.Add(item); } } _phase = SchedulerPhase.Idle; return(simulatedTime); }
public void ScheduleDeltaEvent(SignalEventItem item) { _deltaEvents.Push(item); }
public TimedSignalEventItem(SignalEventItem item, TimeSpan timeSpan) { _item = item; _timeSpan = timeSpan; }