コード例 #1
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestThreadSepFunctionality()
        {
            IExecutive exec = ExecFactory.Instance.CreateExecutive();
            DateTime   now  = DateTime.Now;
            DateTime   when;
            double     priority;

            for (int i = 0; i < NUM_EVENTS; i++)
            {
                when     = new DateTime(now.Ticks + m_random.Next());
                priority = m_random.NextDouble();
                Debug.WriteLine("Primary requesting detachable event service for " + when + ", at priority " + priority);
                exec.RequestEvent(new ExecEventReceiver(TimeSeparatedTask), when, priority, "Task " + i, ExecEventType.Detachable);
            }

            exec.Start();

            Debug.WriteLine("\r\n\r\n\r\nNow going to do it again after a 1.5 second pause.\r\n\r\n\r\n");
            System.Threading.Thread.Sleep(1500);

            exec = ExecFactory.Instance.CreateExecutive();
            now  = DateTime.Now;

            for (int i = 0; i < NUM_EVENTS; i++)
            {
                when     = new DateTime(now.Ticks + m_random.Next());
                priority = m_random.NextDouble();
                Debug.WriteLine("Primary requesting detachable event service for " + when + ", at priority " + priority);
                exec.RequestEvent(new ExecEventReceiver(TimeSeparatedTask), when, priority, "Task " + i, ExecEventType.Detachable);
            }

            exec.Start();
        }
コード例 #2
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestSingleShotEvent()
        {
            IExecutive exec1 = ExecFactory.Instance.CreateExecutive();

            m_exec1_ExecutiveStarted_SingleShot_Count = 0;
            exec1.ExecutiveStarted_SingleShot        += new ExecutiveEvent(exec1_ExecutiveStarted_SingleShot);
            exec1.Start();
            exec1.Start();
            Debug.Assert(m_exec1_ExecutiveStarted_SingleShot_Count == 1);
        }
コード例 #3
0
        public static void Run()
        {
            RandomServer rs          = null;
            IExecutive   exec        = null;
            Activity     fooActivity = null;
            Activity     barActivity = null;


            int defaultBufferSize = 100;

            foreach (ulong hyperSeed in new ulong[] { 87654, 23456 })
            {
                Console.WriteLine("Test with hyperSeed of {0}.", hyperSeed);
                rs   = new RandomServer(hyperSeed, defaultBufferSize);
                exec = ExecFactory.Instance.CreateExecutive();

                fooActivity = new Activity("fooActivity", 5, exec, rs, 12345);
                barActivity = new Activity("barActivity", 6, exec, rs, 10558);

                exec.Start();
            }

            ulong _hyperSeed = 24680;

            Console.WriteLine("Test with hyperSeed of {0}. First, with no interference:", _hyperSeed);
            rs   = new RandomServer(_hyperSeed, defaultBufferSize);
            exec = ExecFactory.Instance.CreateExecutive();

            fooActivity = new Activity("fooActivity", 5, exec, rs, 12345);
            barActivity = new Activity("barActivity", 6, exec, rs, 10558);

            exec.Start();


            exec.Reset();
            Console.WriteLine("Test with hyperSeed of {0}. This time, we interfere with Bobby:", _hyperSeed);
            rs   = new RandomServer(_hyperSeed, defaultBufferSize);
            exec = ExecFactory.Instance.CreateExecutive();

            fooActivity = new Activity("fooActivity", 5, exec, rs, 12345);
            barActivity = new Activity("barActivity", 6, exec, rs, 10558);

            DateTime when = DateTime.Parse("1/1/0001 7:13:29 AM");

            exec.RequestEvent(
                delegate(IExecutive _exec, object userData) {
                Console.WriteLine("{0} : Doubling barActivity's multiplier.", _exec.Now); barActivity.Multiplier = 2.0;
            },
                when);

            exec.Start();
        }
コード例 #4
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestExecutivePriority()
        {
            IExecutive exec = ExecFactory.Instance.CreateExecutive();
            DateTime   now  = DateTime.Now;
            int        priority;

            // initialize validation variables
            m_error            = false;
            m_validatePriority = 0;
            Debug.WriteLine("");
            Debug.WriteLine("Start test TestExecutivePriority");
            Debug.WriteLine("");

            for (int i = 0; i < NUM_EVENTS; i++)
            {
                priority = (int)(m_random.NextDouble() * 100);
                if (m_validatePriority < priority)
                {
                    m_validatePriority = priority;
                }
                Debug.WriteLine("Primary requesting event service for " + now + ", at priority " + priority);
                exec.RequestEvent(new ExecEventReceiver(ExecEventRecieverPriority), now, priority, priority, m_execEventType);
            }

            Debug.WriteLine("");

            exec.Start();

            Debug.WriteLine("");

            // test validate variable
            Assert.IsTrue(!m_error, "Executive did not submit events in the order of the correct priority");

            Debug.WriteLine("");
        }
コード例 #5
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                #region Set up a metronome to fire once a second in sim time.

                DateTime         startAt     = DateTime.Parse("Fri, 15 Jul 2016 00:00:00");
                DateTime         finishAfter = DateTime.Parse("Fri, 15 Jul 2016 00:09:59");
                TimeSpan         period      = TimeSpan.FromSeconds(.005);
                Metronome_Simple metronome   = Metronome_Simple.CreateMetronome(exec, startAt, finishAfter, period);
                metronome.TickEvent += UpdateState;

                #endregion

                // Attach an ExecController so that it runs at 100 x of user time,
                // and issues 10 render events every second.
                double         scale          = 2.0; // 10^2, or 100 x real-time.
                int            frameRate      = 10;  // 10 render events per second.
                ExecController execController = new ExecController(exec, scale, frameRate, exec);

                execController.Render += Render;

                exec.Start();

                Console.WriteLine("{0} simulation events fired.", exec.EventCount);
            }
コード例 #6
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestExecutiveWhen()
        {
            IExecutive exec = ExecFactory.Instance.CreateExecutive();
            DateTime   now  = DateTime.Now;
            DateTime   when;

            // initialize validation variables
            m_error        = false;
            m_validateWhen = new DateTime(now.Ticks);
            Debug.WriteLine("");
            Debug.WriteLine("Start test TestExecutiveWhen");
            Debug.WriteLine("");

            for (int i = 0; i < NUM_EVENTS; i++)
            {
                when = new DateTime(now.Ticks + m_random.Next());
                Debug.WriteLine("Primary requesting event service for " + when);
                //if (m_validateWhen.Ticks < when.Ticks) {m_validateWhen = when;}
                exec.RequestEvent(new ExecEventReceiver(ExecEventRecieverWhen), when, 0, when, m_execEventType);
            }

            Debug.WriteLine("");

            exec.Start();

            Debug.WriteLine("");

            // test validation variable
            Assert.IsTrue(!m_error, "Executive did not submit events in correct date/time order");

            Debug.WriteLine("");
        }
コード例 #7
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                Domain.Sample1.Dog rastro = new Domain.Sample1.Dog("Rastro");

                for (int i = 0; i < 5; i++)
                {
                    // Schedule 15 speaking events.

                    Domain.Sample1.Cat aCat = new Domain.Sample1.Cat("Cat_" + i);
                    Domain.Sample1.Dog aDog = new Domain.Sample1.Dog("Dog_" + i);

                    exec.RequestEvent(rastro.Speak, when, 0.0, null, ExecEventType.Detachable);
                    exec.RequestEvent(aDog.Speak, when, 0.0, null, ExecEventType.Detachable);
                    exec.RequestEvent(aCat.Speak, when, 0.0, null, ExecEventType.Detachable);

                    when += TimeSpan.FromMinutes(10.0);
                }

                exec.RequestEvent(RescindIndividual, when - TimeSpan.FromMinutes(35), rastro);
                exec.RequestEvent(RescindCats, when - TimeSpan.FromMinutes(25));

                exec.Start();
            }
コード例 #8
0
        public void TestEventTimeHistorian()
        {
            IRandomChannel     irc         = m_rs.GetRandomChannel();
            IExecutive         exec        = ExecFactory.Instance.CreateExecutive();
            EventTimeHistorian myHistorian = new EventTimeHistorian(exec, 256);
            DateTime           when        = m_startDate;

            // We set up NUM_SAMPLES events with random (0->50) minute intervals.
            TimeSpan totalTimeSpan = TimeSpan.Zero;

            for (int i = 0; i < NUM_SAMPLES; i++)
            {
                exec.RequestEvent(DoEvent, when, 0.0, myHistorian, ExecEventType.Synchronous);
                double   d     = irc.NextDouble();
                TimeSpan delta = TimeSpan.FromMinutes(d * 50.0);
                totalTimeSpan += delta;
                if (i < 30)
                {
                    Console.WriteLine("Delta #" + i + ", " + delta.ToString());
                }
                when += delta;
            }

            m_actualAverage = TimeSpan.FromTicks(totalTimeSpan.Ticks / NUM_SAMPLES);
            Console.WriteLine("Average timeSpan was " + m_actualAverage + ".");

            exec.Start();

            Console.WriteLine("After {0} events, the average interval was {1}.", myHistorian.PastEventsReceived, myHistorian.GetAverageIntraEventDuration());
        }
コード例 #9
0
 public void Executive_can_be_started_and_stopped()
 {
     executive.Start().Wait();
     Assert.AreEqual(State.Running, executive.State);
     executive.Stop().Wait();
     Assert.AreEqual(State.Stopped, executive.State);
 }
コード例 #10
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestExecutiveUnRequestSelector()
        {
            IExecutive exec = ExecFactory.Instance.CreateExecutive();
            DateTime   now  = DateTime.Now;
            DateTime   when;
            double     priority;

//			IExecEventSelector ees = null;

            // initialize validation variables
            m_error             = false;
            m_validateUnRequest = new ArrayList();
            Debug.WriteLine("");
            Debug.WriteLine("Start test TestExecutiveUnRequestSelector");
            Debug.WriteLine("");

            for (int i = 0; i < NUM_EVENTS; i++)
            {
                when     = new DateTime(now.Ticks + m_random.Next());
                priority = m_random.NextDouble();
                Debug.WriteLine("Primary requesting event service " + i);
                switch (i)
                {
                case 1:
                case 2:
                case 3:
                case 5:
                case 7:
                case 11:
//						m_validateUnRequest.Add(i);
//						ees = new ExecEventSelectorByTargetType(this.GetType());
//						ExecEventReceiver eer = new ExecEventReceiver(ees.SelectThisEvent(eer,when,priority,i,m_execEventType));
//						exec.RequestEvent(eer,when,priority,i,m_execEventType);
//						exec.UnRequestEvents(ees);
                    break;

                default:
                    exec.RequestEvent(new ExecEventReceiver(this.ExecEventRecieverUnRequestEventReceiver), when, priority, i, m_execEventType);
                    break;
                }
                ;
            }


            Debug.WriteLine("");

            // AEL			exec.UnRequestEvents(new ExecEventSelectorByTargetType(this));

            exec.Start();

            Debug.WriteLine("");

            // test validation variable
            Assert.IsTrue(!m_error, "Executive fired a unrequested event");

            Debug.WriteLine("");
        }
コード例 #11
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestEventJoinDetachable()
        {
            IExecutive    exec1     = ExecFactory.Instance.CreateExecutive("Highpoint.Sage.SimCore.Executive", Guid.NewGuid());
            DateTime      setupTime = new DateTime(2008, 11, 24, 12, 15, 44);
            ExecEventType eet       = ExecEventType.Detachable; // Don't change this one. Join must be done on a detachable event.

            exec1.RequestEvent(new ExecEventReceiver(JoinDetachableSetup), setupTime, 0.0, null, eet);
            exec1.Start();
        }
コード例 #12
0
        public void TestExecutiveUnRequestTarget()
        {
            IExecutive  exec = ExecFactory.Instance.CreateExecutive();
            DateTime    now  = DateTime.Now;
            DateTime    when;
            double      priority;
            OtherTarget ot = null;

            // initialize validation variables
            m_error             = false;
            m_validateUnRequest = new ArrayList();
            _Debug.WriteLine("");
            _Debug.WriteLine("Start test TestExecutiveUnRequestTarget");
            _Debug.WriteLine("");

            for (int i = 0; i < NUM_EVENTS; i++)
            {
                when     = new DateTime(now.Ticks + m_random.Next());
                priority = m_random.NextDouble();
                _Debug.WriteLine("Primary requesting event service " + i);
                switch (i)
                {
                case 1:
                case 2:
                case 3:
                case 5:
                case 7:
                case 11:
                    m_validateUnRequest.Add(i);
                    ot = new OtherTarget(m_validateUnRequest, m_error);
                    ExecEventReceiver eer = new ExecEventReceiver(ot.ExecEventRecieverUnRequestEventReceiver);
                    exec.RequestEvent(eer, when, priority, i, m_execEventType);
                    exec.UnRequestEvents(ot);
                    break;

                default:
                    exec.RequestEvent(new ExecEventReceiver(this.ExecEventRecieverUnRequestEventReceiver), when, priority, i, m_execEventType);
                    break;
                }
                ;
            }


            _Debug.WriteLine("");

// AEL			exec.UnRequestEvents(new OtherTarget(m_validateUnRequest, m_error));

            exec.Start();

            _Debug.WriteLine("");

            // test validation variable
            _Debug.Assert(!m_error, "Executive did fire a unrequested event");

            _Debug.WriteLine("");
        }
コード例 #13
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        private void StartExec(object obj)
        {
            IExecutive exec = (IExecutive)obj;

            Debug.WriteLine("\r\n" + "Starting exec..." + "\r\n");
            DateTime startTime = new DateTime(2006, 5, 16);

            exec.RequestEvent(new ExecEventReceiver(SteadyStateEventStream), startTime, 1, 400);
            exec.Start();
        }
コード例 #14
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                exec.RequestEvent(new Plumber("Paul").FixTheSink, when, 0.0, null, ExecEventType.Detachable);

                exec.Start();
            }
コード例 #15
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                exec.ExecutiveStarted += ExecStarted;
                // Allows you to register handler on every Run invocation. Else
                // second run invocation would result in two handlers, third, etc.
                exec.ExecutiveStarted_SingleShot += ExecStarted_SingleShot;

                Console.WriteLine("Starting the simulation. Executive is in state {0}.", exec.State);
                exec.Start();

                Console.WriteLine("\r\nSimulation done. Executive is in state {0}.", exec.State);
                exec.Reset();
                Console.WriteLine("\r\nReset the simulation. Executive is in state {0}.", exec.State);

                Console.WriteLine("\r\nRe-running the simulation. Executive is in state {0}.", exec.State);
                exec.Start();
            }
コード例 #16
0
ファイル: 2_StateManagement.cs プロジェクト: sjvannTMU/Sage
        public static void Run()
        {
            DateTime when = DateTime.Parse("Fri, 15 Jul 2016 00:00:00");

            IExecutive exec = ExecFactory.Instance.CreateExecutive();

            exec.RequestEvent(StartProcessToken, when, 0.0, null, ExecEventType.Detachable);

            exec.Start();
        }
コード例 #17
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                exec.RequestEvent(SayHello, when);

                exec.Start();
            }
コード例 #18
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                exec.RequestEvent(CookDinner, when, 0.0, null, ExecEventType.Detachable);

                exec.Start();
            }
コード例 #19
0
            public static void Run()
            {
                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 00:00:00");

                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                exec.RequestDaemonEvent(CheckIfStillRunning, when, 0.0, null);
                exec.RequestEvent(Finish, when + TimeSpan.FromMinutes(100));

                exec.Start();
            }
コード例 #20
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                exec.RequestEvent(WriteIt, when, 0.0, "World");
                exec.RequestEvent(WriteIt, when, 1.0, "Hello");

                exec.Start();
            }
コード例 #21
0
            public static void Run()
            {
                IExecutive       exec        = ExecFactory.Instance.CreateExecutive();
                DateTime         startAt     = DateTime.Parse("Fri, 15 Jul 2016 00:00:00");
                DateTime         finishAfter = DateTime.Parse("Fri, 15 Jul 2016 23:59:59");
                TimeSpan         period      = TimeSpan.FromMinutes(60);
                Metronome_Simple metronome   = Metronome_Simple.CreateMetronome(exec, startAt, finishAfter, period);

                metronome.TickEvent += WriteIt;

                exec.Start();
            }
コード例 #22
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                Queue <string> userData = new Queue <string>(new[] { "Hello", "World" });

                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                exec.RequestEvent(WriteIt, when, 0.0, userData);

                exec.Start();
            }
コード例 #23
0
            public static void Run()
            {
                IExecutive       exec        = ExecFactory.Instance.CreateExecutive();
                DateTime         startAt     = DateTime.Parse("Thu, 10 Jul 2003 03:51:21");
                DateTime         finishAfter = DateTime.Parse("Wed 15 Dec 2004 19:22:47");
                TimeSpan         period      = TimeSpan.FromMinutes(9000.0);
                Metronome_Simple metronome   = Metronome_Simple.CreateMetronome(exec, startAt, finishAfter, period);

                metronome.TickEvent += WriteIt;

                exec.Start();
            }
コード例 #24
0
ファイル: TestTuples.cs プロジェクト: sjvannTMU/Sage
 public void TestTupleBasics()
 {
     string[] expected = new string[] { "632254657940000000:RT1:" + HashCode(k1), "632254657940000000:RT2b:" + HashCode(k1), "632254657940000000:PT1:" + HashCode(k1), "632254657940000000:PT2:" + HashCode(k1), "632254657940000000:TT1:" + HashCode(k1), "632254657940000000:TT2a:" + HashCode(k1) };
     InitTest();
     RequestEvent(XActType.Read, k1, 0);
     RequestEvent(XActType.Post, k1, 0);
     RequestEvent(XActType.Take, k1, 0);
     m_exec.Start();
     EvaluateTest(expected, false);
 }
コード例 #25
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void TestExecutiveUnRequestHash()
        {
            string[]  eventUserData  = new string[] { "Cat", "Dog", "Bat", "Frog", "Mink", "Bee", "Bird", "Worm", "Horse", "Moose", "Bear", "Platypus" };
            ArrayList eventsToRemove = new ArrayList(new string[] { "Cat", "Bat", "Bee", "Bird", "Bear", "Platypus" });
            //ArrayList eventsThatShouldRemain = new ArrayList(new string[]{"Dog","Frog","Mink","Worm","Horse","Moose"});

            IExecutive exec = ExecFactory.Instance.CreateExecutive();
            DateTime   now  = DateTime.Now;
            DateTime   when;
            double     priority;

            // initialize validation variables
            m_error             = false;
            m_validateUnRequest = new ArrayList();
            Debug.WriteLine("");
            Debug.WriteLine("Start test TestExecutiveUnRequestHash");
            Debug.WriteLine("");

            ArrayList eventIDsForRemoval = new ArrayList();

            foreach (string eud in eventUserData)
            {
                when     = new DateTime(now.Ticks + m_random.Next());
                priority = m_random.NextDouble();
                Trace.Write("Primary requesting event service with user data \"" + eud + "\", and eventID ");
                long eventID = exec.RequestEvent(new ExecEventReceiver(ExecEventRecieverUnRequestHash), when, priority, eud, m_execEventType);
                Debug.WriteLine(eventID + ".");
                if (eventsToRemove.Contains(eud))
                {
                    eventIDsForRemoval.Add(eventID);
                    Debug.WriteLine("\tWe will be requesting the removal of this event.");
                }
            }

            foreach (long eventID in eventIDsForRemoval)
            {
                Debug.WriteLine("Unrequesting event # " + eventID);
                m_validateUnRequest.Add(eventID);
                exec.UnRequestEvent(eventID);
            }

            Debug.WriteLine("");

            exec.Start();

            Debug.WriteLine("");

            // test validation variable
            Assert.IsTrue(!m_error, "Executive did fire a unrequested event");

            Debug.WriteLine("");
        }
コード例 #26
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                DateTime when = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                long eventKey =
                    exec.RequestEvent(WriteIt, when + TimeSpan.FromMinutes(5.0), "Hello.");

                exec.RequestEvent(RescindIt, when, eventKey);

                exec.Start();
            }
コード例 #27
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        private void StopAndRestartExec(object obj)
        {
            System.Threading.Thread.Sleep(1000);
            IExecutive exec = (IExecutive)obj;

            Debug.WriteLine("\r\n" + "Pausing for two seconds..." + "\r\n");
            Debug.WriteLine("Before pause, Exec state is " + exec.State);
            exec.Stop();
            System.Threading.Thread.Sleep(2000);
            Debug.WriteLine("After pause, Exec state is " + exec.State);
            Debug.WriteLine("\r\n" + "Resuming..." + "\r\n");
            exec.Start();
            Debug.WriteLine("Exec state is now " + exec.State);
        }
コード例 #28
0
        public void DoActionTest2()
        {
            IExecutive exec = ExecFactory.Instance.CreateExecutive();

            IAction part1  = new ParallelActionSet(new Action("PreDelay", FIVE_MINS, 1.0), new Action("RscAcquire", TEN_MINS, 1.0));
            IAction part2  = new Action("PreDelay", TimeSpan.FromMinutes(5.0), 1.0);
            IAction part3  = new ConcurrentActionSet(new Action("XferIn", FIVE_MINS, 1.0), new Action("XferOut", FIFTEEN_MINS, 1.0));
            IAction part4  = new Action("PostDelay", TimeSpan.FromMinutes(5.0), 1.0);
            IAction part5  = new ParallelActionSet(new Action("RscRelease", FIVE_MINS, 1.0), new Action("PostDelay", TWENTY_MINS, 1.0));
            IAction scheme = new ActionList(part1, part2, part3, part4, part5);

            exec.RequestEvent(new ExecEventReceiver(scheme.Run), DateTime.Now, 0.0, null, ExecEventType.Detachable);
            exec.Start();
        }
コード例 #29
0
ファイル: TestExecutive.cs プロジェクト: sjvannTMU/Sage
        public void RecreateFailure()
        {
            IExecutive exec = ExecFactory.Instance.CreateExecutive("Highpoint.Sage.SimCore.ExecutiveFastLight, Sage", Guid.NewGuid());

            foreach (string s in testTimes)
            {
                DateTime dt = DateTime.Parse(s);
                exec.RequestEvent(new ExecEventReceiver(DoIt), dt, 0.0, dt.ToString());
            }


            m_lastNow = exec.Now;
            exec.Start();
        }
コード例 #30
0
            public static void Run()
            {
                IExecutive exec = ExecFactory.Instance.CreateExecutive();

                DateTime when1 = DateTime.Parse("Fri, 15 Jul 2016 03:51:21");

                exec.RequestEvent(SayHello, when1);

                DateTime when2 = DateTime.Parse("Mon, 18 Jul 2016 05:15:08");

                exec.RequestEvent(SayWorld, when2);

                exec.Start();
            }