protected SimEvents Interrupter(SimProcess victim, String value, Double timeout = 0) { while (true) { victim.Interrupt(value); yield return(Env.Timeout(timeout)); } }
// Expected output: // Breakdown Bus at 300 // Bus repaired at 320 // Breakdown Bus at 620 // Bus repaired at 640 // Breakdown Bus at 940 // Bus repaired at 960 // Bus has arrived at 1060 // Dessert: No more events at time 1260 public static void Main() { var env = Sim.Environment(); var bus = env.Process(OperateBus(env, repairDuration: 20, tripLength: 1000)); _breakBus = env.Process(BreakBus(env, bus, interval: 300)); env.Run(until: 4000); Console.WriteLine("Dessert: No more events at time {0}", env.Now); }
SimEvents Called_NoExitValue(SimProcess caller, IntWrapper w) { Assert.AreSame(caller, Env.ActiveProcess); w.X += 10; yield return(Env.Timeout(10)); Assert.AreSame(caller, Env.ActiveProcess); w.X += 20; yield return(Env.Timeout(20)); Assert.AreSame(caller, Env.ActiveProcess); }
IEvents Interrupter(SimProcess victim, double delay = 0, object value = null) { yield return(Env.Timeout(delay)); if (value != null) { victim.Interrupt(value); } else { victim.Interrupt(); } }
static IEvents BreakBus(SimEnvironment env, SimProcess bus, double interval) { while (true) { yield return(env.Timeout(interval)); if (bus.Succeeded) { break; } bus.Interrupt("Breakdown Bus"); yield return(env.Suspend()); } }
internal RequestEvent(PreemptiveResource resource, double priority, bool preempt) : base(resource.Env, priority) { _resource = resource; _priority = new ReqPriority(priority, Env.Now, preempt, resource._nextVersion++); _process = Env.ActiveProcess; if (_resource._requestQueue.Count == 0 && TrySchedule()) { return; } _handle = _resource._requestQueue.Add(this, _priority); if (preempt && _resource._requestQueue.Min.Value.Equals(this)) { var toPreempt = _resource._users.Min.Value; if (ReqPriority.Comparer.Compare(toPreempt._priority, _priority) <= 0) { return; } toPreempt.Dispose(); toPreempt._process.Interrupt(new PreemptionInfo(_process, toPreempt.Time)); } }
/// <summary> /// /// </summary> /// <param name="env"></param> /// <param name="generator"></param> internal Call(SimEnvironment env, IEnumerator <SimEvent> generator) : base(env) { (this as IInternalCall).Steps = generator; _process = env.ActiveProcess; env.ScheduleEvent(this); }
internal Interrupt(SimEnvironment env, SimProcess process, object value) : base(env) { _process = process; _value = value; }
IEvents TargetTester2(SimProcess starter) { Assert.AreSame(null, Env.ActiveProcess.Target); Assert.AreSame(Env.ActiveProcess, starter.Target); yield break; }
static IEnumerable <SimEvent> Interrupter(SimProcess victim) { victim.Interrupt("NOW"); yield break; }
public Car(SimEnvironment env) { _env = env; Action = env.Process(Start()); }
static IEnumerable <SimEvent> EmergencyBrake(SimEnvironment env, SimProcess train) { yield return(env.Timeout(BreakTime)); train.Interrupt("FRENO EMERGENZA"); }