Example #1
0
        private void run()
        {
            // Each iteration of this loop will consume all items in 'tasks'.
            while (workEvent.WaitOne() && !stopRunning)
            {
                try
                {
                    statusString = "working";
                    while (tasks.Count > 0 && !stopRunning)
                    {
                        SolverTask task  = (SolverTask)tasks.Dequeue();
                        DateTime   start = DateTime.Now;
                        isWorking = true;

                        double[] throttles = solver.run(thrusters, task.direction, task.rotation);

                        isWorking = false;
                        resultsQueue.Enqueue(new SolverResult(task.key, throttles));

                        _calculationTime.value = (DateTime.Now - start).TotalSeconds;
                        calculationTime        = _calculationTime;
                    }
                    statusString = "idle";
                }
                catch (InvalidOperationException)
                {
                    // Dequeue() failed due to the queue being cleared.
                }
                catch (Exception e)
                {
                    errorString = e.Message + " ..[" + e.Source + "].. " + e.StackTrace;
                }
            }
        }
Example #2
0
        public override void Step(float elapsedSec)
        {
            if (Input.IsKeyPressed(ConsoleKey.Escape))
            {
                if (Solver != null)
                {
                    if (SolverCommand != null)
                    {
                        SolverCommand.ExitConditions.ExitRequested = true;
                    }

                    if (SolverTask != null)
                    {
                        SolverTask.Wait();
                        SolverTask.Dispose();
                        SolverTask    = null;
                        SolverCommand = null;
                        SolverState   = null;
                        Solver        = null;
                    }
                }

                Parent.ShowLibrary();
            }
            if (Input.IsKeyPressed(ConsoleKey.Backspace))
            {
                if (Solver != null)
                {
                    if (SolverCommand != null)
                    {
                        SolverCommand.ExitConditions.ExitRequested = true;

                        if (SolverTask != null)
                        {
                            SolverTask.Wait();
                            SolverTask.Dispose();
                            SolverTask    = null;
                            SolverCommand = null;
                            SolverState   = null;
                            Solver        = null;
                        }
                    }
                }
            }
            if (Solver is null)
            {
                if (Input.IsKeyPressed(ConsoleKey.F) || Input.IsKeyPressed(ConsoleKey.Enter))
                {
                    RunSolverWith(new SingleThreadedForwardSolver(new SolverNodeFactoryTrivial()));
                }
                if (Input.IsKeyPressed(ConsoleKey.R))
                {
                    RunSolverWith(new SingleThreadedReverseSolver(new SolverNodeFactoryTrivial()));
                }
                else if (Input.IsKeyPressed(ConsoleKey.M))
                {
                    RunSolverWith(new MultiThreadedForwardReverseSolver(new SolverNodeFactoryTrivial()));
                }
            }
            else
            {
            }
        }