コード例 #1
0
 static IEnumerable<IEvent> Worker(IEnvironment env)
 {
     Console.WriteLine("{0}: Carico la macchina...",
                       env.Now);
     yield return env.Timeout(LoadTime);
     env.Exit(env.Random.Choice(Tasks));
 }
コード例 #2
0
 static IEnumerable<IEvent> Machine(IEnvironment env)
 {
     while (true) {
         var worker = env.Start(Worker(env));
         yield return worker;
         Console.WriteLine("{0}: Eseguo il comando {1}",
                           env.Now, worker.Value);
         yield return env.Timeout(WorkTime);
     }
 }
コード例 #3
0
 static IEvents Train(IEnvironment env)
 {
     object cause;
     string fmt;
     while (true) {
         var time = env.Random.Exponential(1.0/AvgTravelTime);
         fmt = "Treno in viaggio per {0:.00} minuti";
         Console.WriteLine(fmt, time);
         yield return env.Timeout(time);
         if (env.ActiveProcess.Interrupted(out cause))
             break;
         fmt = "Arrivo in stazione, attesa passeggeri";
         Console.WriteLine(fmt);
         yield return env.Timeout(2.Minutes());
         if (env.ActiveProcess.Interrupted(out cause))
             break;
     }
     fmt = "Al minuto {0:.00}: {1}";
     Console.WriteLine(fmt, env.Now, cause);
 }
コード例 #4
0
 static IEvents Person(IEnvironment env, 
                       string gender, 
                       IResource toilet)
 {
     using (var req = toilet.Request()) {
         yield return req;
         Console.WriteLine("{0:0.00}: {1} --> Bagno",
                           env.Now, gender);
         var t = env.Random.Exponential(1.0/AvgTimeInToilet);
         yield return env.Timeout(t);
         Console.WriteLine("{0:0.00}: {1} <-- Bagno",
                           env.Now, gender);
     }
 }
コード例 #5
0
 static IEvents PersonGenerator(IEnvironment env)
 {
     var womenToilet = env.NewResource(1);
     var menToilet = env.NewResource(1);
     var count = 0;
     while (true) {
         var rnd = env.Random.NextDouble();
         var gn = ((rnd<0.5) ? "Donna" : "Uomo") + count++;
         var tt = (rnd<0.5) ? womenToilet : menToilet;
         Console.WriteLine("{0:0.00}: {1} in coda",
                           env.Now, gn);
         env.Start(Person(env, gn, tt));
         var t = env.Random.Exponential(1.0/AvgPersonArrival);
         yield return env.Timeout(t);
     }
 }
コード例 #6
0
 static IEnumerable<IEvent> PastaCook(IEnvironment env)
 {
     while (true) {
         var cookTime = env.Random.Normal(AvgCookTime,
                                          StdCookTime);
         var fmt = "Pasta in cottura per {0} minuti";
         Console.WriteLine(fmt, cookTime);
         yield return env.Timeout(cookTime);
         if (cookTime < AvgCookTime - StdCookTime)
             Console.WriteLine("Pasta poco cotta!");
         else if (cookTime > AvgCookTime + StdCookTime)
             Console.WriteLine("Pasta troppo cotta...");
         else
             Console.WriteLine("Pasta ben cotta!!!");
     }
 }
コード例 #7
0
 static ITimeout<string> NewTarget(IEnvironment env)
 {
     var delay = env.Random.DiscreteUniform(1, 20);
     var target = env.Random.Choice(Targets);
     return env.Timeout(delay, target);
 }
コード例 #8
0
 static IEnumerable<IEvent> AProcess(IEnvironment env)
 {
     yield return env.Timeout(7);
     env.Exit("VAL_P");
 }
コード例 #9
0
 static IEvents EmergencyBrake(IEnvironment env, 
                               IProcess train)
 {
     yield return env.Timeout(BreakTime);
     train.Interrupt("FRENO EMERGENZA");
 }
コード例 #10
0
 static IEnumerable<IEvent> DoSucceed(IEnvironment env, 
                                       IEvent<object> ev)
 {
     yield return env.Timeout(5);
     ev.Succeed("SI :)");
 }
コード例 #11
0
 static IEnumerable<IEvent> DoFail(IEnvironment env, 
                                    IEvent<object> ev)
 {
     yield return env.Timeout(5);
     ev.Fail("NO :(");
 }