コード例 #1
0
        void Executive_ExecutiveStarted_SingleShot2(IExecutive exec)
        {
            RandomServer r = new RandomServer(12345, 1000);

            Randoms.IRandomChannel rc = r.GetRandomChannel(98765, 1000);

            double   howMuch = 0.0;
            DateTime when    = new DateTime(2008, 08, 01, 12, 00, 00);

            for (int i = 0; i < 1000; i++)
            {
                int key    = rc.Next(0, 2);
                int deltaT = rc.Next(0, 2);
                howMuch = rc.NextDouble() * 100.0;
                switch (key)
                {
                case 0:
                    m_howMuchPut += howMuch;
                    Console.WriteLine("{0} : Add {1} kg.", when, howMuch);
                    AddSomeMaterial(when, m_mt1.CreateMass(howMuch, AMBIENT_TEMPERATURE));
                    break;

                case 1:
                    m_howMuchRetrieved += howMuch;
                    Console.WriteLine("{0} : Try to remove {1} kg.", when, howMuch);
                    RequestMaterial(when, howMuch);
                    break;

                case 2:
                    Console.WriteLine("{0} : Confirm bookkeeping.", when);
                    ConfirmTotlMass(when);
                    break;

                default:
                    break;
                }
                when += TimeSpan.FromMinutes(deltaT);
            }

            // Now, if there are outstanding requests, satisfy them.
            howMuch = m_howMuchRetrieved - m_howMuchPut;
            if (howMuch > 0)
            {
                Console.WriteLine("{0} : Add {1} kg.", when, howMuch);
                AddSomeMaterial(when, m_mt1.CreateMass(howMuch, AMBIENT_TEMPERATURE));
            }

            m_howMuchPut       = 0.0;
            m_howMuchRetrieved = 0.0;

            Console.WriteLine("Starting Test...");
        }
コード例 #2
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
 private void PerfTestExecute(IExecutive exec, object userData)
 {
     Randoms.IRandomChannel rch = (Randoms.IRandomChannel)userData;
     if (rch.NextDouble() < 0.405 && exec.EventCount < eventCountCeil)
     {
         int nNewEvents = rch.Next(1, 5);
         for (int i = 0; i < nNewEvents; i++)
         {
             DateTime when = exec.Now + TimeSpan.FromMinutes(rch.NextDouble() * 100);
             if (rch.NextDouble() < pctSynchronous)
             {
                 exec.RequestEvent(new ExecEventReceiver(PerfTestExecute), when, 0.0, rch);
             }
             else
             {
                 exec.RequestEvent(new ExecEventReceiver(PerfTestExecute), when, 0.0, rch, ExecEventType.Detachable);
             }
         }
     }
 }
コード例 #3
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestPerformance()
        {
            IExecutive exec1 = ExecFactory.Instance.CreateExecutive("Highpoint.Sage.SimCore.Executive", Guid.NewGuid());

            Randoms.RandomServer   rsvr = new Highpoint.Sage.Randoms.RandomServer(012345, 1000);
            Randoms.IRandomChannel rch  = rsvr.GetRandomChannel(987654321, 1000);
            DateTime timeCursor         = new DateTime(2009, 1, 1, 0, 0, 0);

            eventCountCeil = 180000;
            pctSynchronous = 0.0;

            for (int i = 0; i < 100; i++)
            {
                timeCursor += TimeSpan.FromMinutes(rch.NextDouble() * 100);
                exec1.RequestEvent(new ExecEventReceiver(PerfTestExecute), timeCursor, 0.0, rch);
            }
            DateTime then = DateTime.Now;

            exec1.Start();
            TimeSpan howLong = DateTime.Now - then;

            Console.WriteLine("Serviced " + exec1.EventCount + " events in " + howLong.TotalMilliseconds + " msec.");
        }