Ejemplo n.º 1
0
        public void NotifyAndWait()
        {
            Notify();

            if (m_thread?.IsAlive == true)
            {
                WorkDoneSync.WaitOne();
            }
        }
Ejemplo n.º 2
0
 public Thread ExecuteChunk(string command, Action <string> performAfterFinished = null)
 {
     DoWorkSync.Reset();
     WorkDoneSync.Reset();
     m_thread = new Thread(() => { RunScript(command, performAfterFinished); WorkDoneSync.Set(); })
     {
         IsBackground = true
     };
     m_thread.Start();
     Thread.Sleep(1);
     return(m_thread);
 }
Ejemplo n.º 3
0
 public void Repeat(Action stepFunc, int repetitions)
 {
     for (int i = 0; i < repetitions; i++)
     {
         DoWorkSync.WaitOne();
         stepFunc();
         WorkDoneSync.Set();
         if (ShouldStopScript)
         {
             ShouldStopScript = false;
             return;
         }
     }
 }
Ejemplo n.º 4
0
        public void Repeat(Action <object[]> stepFunc, int repetitions, params object[] parameters)
        {
            for (int i = 0; i < repetitions; i++)
            {
                DoWorkSync.WaitOne();
                stepFunc(parameters);
                WorkDoneSync.Set();

                if (ShouldStopScript)
                {
                    ShouldStopScript = false;
                    return;
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// This method synchronize execution of given function and ToyWorld.
        /// The function is called once per ToyWorld execution step until the function
        /// returns true.
        /// </summary>
        /// <param name="stepFunc">A function changing or observing ToyWorld. Returns bool.</param>
        /// <param name="parameters">Any parameters the function accepts.</param>
        public void Do(Func <object[], bool> stepFunc, params object[] parameters)
        {
            for (int i = 0; i < MAXIMUM_NUMBER_OF_DO_METHED_CALLS; i++)
            {
                DoWorkSync.WaitOne();
                object o = stepFunc(parameters);
                WorkDoneSync.Set();

                if (ShouldStopScript)
                {
                    ShouldStopScript = false;
                    return;
                }
                bool end = (bool)o;
                if (end)
                {
                    return;
                }
            }
            throw new Exception("Too long time in Do function.");
        }
Ejemplo n.º 6
0
 public void Perform(Action <object[]> stepFunc, params object[] parameters)
 {
     DoWorkSync.WaitOne();
     stepFunc(parameters);
     WorkDoneSync.Set();
 }