예제 #1
0
        /// <summary>
        /// Démarre la résolution des map A* selon les modèles de parallélisation choisies
        /// </summary>
        private void StartResolving()
        {
            //--- Création du threadManager pour le type Natif
            if (chkMethodeNative.Checked && _methodToStart == TypeThreading.Natif)
            {
                AddLog("Parallélisation mode natif - Début");
                _currentThreadManager = new ThreadManagerNative((int)this.numNmbThread.Value, _listMap);
            }
            else if (!chkMethodeNative.Checked && _methodToStart == TypeThreading.Natif)
            {
                _methodToStart = TypeThreading.BackgroundWorker;
            }
            //---

            //--- Création du threadManager pour le type BackGroundworker
            if (chkMethodeBackgroundWorker.Checked && _methodToStart == TypeThreading.BackgroundWorker)
            {
                AddLog("Parallélisation mode BackgroundWorker - Début");
                _currentThreadManager = new ThreadManagerBackgroundWorker((int)this.numNmbThread.Value, _listMap);
            }
            else if (!chkMethodeBackgroundWorker.Checked && _methodToStart == TypeThreading.BackgroundWorker)
            {
                _methodToStart = TypeThreading.TaskParallelLibrary;
            }
            //---

            //--- Création du threadManager pour le type TPL
            if (chkMethodeTaskParallelLibrary.Checked && _methodToStart == TypeThreading.TaskParallelLibrary)
            {
                //AddLog("Parallélisation mode Task Parallel Library - Début");
                //_currentThreadManager = new ThreadManagerTPL((int)this.numNmbThread.Value, _listMap);
            }
            else if (!chkMethodeTaskParallelLibrary.Checked && _methodToStart == TypeThreading.TaskParallelLibrary)
            {
                _methodToStart = TypeThreading.None;
            }
            //---

            if (_methodToStart != TypeThreading.None)
            {
                InitUI();
                _currentThreadManager.CalculCompletedEvent += new EventHandler<ComputableEventArgs>(currentThreadManager_CalculCompletedEvent);
                _currentThreadManager.AllCalculCompletedEvent += new EventHandler(currentThreadManager_AllCalculCompletedEvent);

                //--- Initialise la liste des maps avant chaque calcul.
                //    Permet de vider les listes
                foreach (IComputable computable in _listMap)
                {
                    computable.Init();
                }

                _currentThreadManager.StartComputation();
            }
            else
            {
                StopResolving();
            }
        }
예제 #2
0
        private void InitResolving()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                //--- Initialise le formulaire
                SetText(btnStartResolving, BUTTON_STOP);
                SetEnabled(pnlMethode, false);
                SetEnabled(pnlParametrage, false);
                //---

                int seed = (int)DateTime.Now.TimeOfDay.TotalMilliseconds;
                if (chkUtiliserGraine.Checked)
                    seed = (int)numSeed.Value;

                AddLog("--- Paramètres ---");
                AddLog(String.Format("Nombre de threads : {0}", numNmbThread.Value));
                AddLog(String.Format("Taux de rafraichissement : {0} ms", numRereshRate.Value));
                AddLog(String.Format("Nombre de maps : {0}", numCountMap.Value));
                AddLog(String.Format("Nombre de noeuds par map : {0}", numCountNode.Value));
                AddLog(String.Format("Distance maximum de liaison : {0}", numDistanceMax.Value));
                AddLog(String.Format("Graine random : {0}", seed));
                AddLog("-----------------------");

                AddLog("Création de la liste des maps");

                Application.DoEvents();

                //--- Création des Map
                Random rnd = new Random(seed);

                _listMap = new List<IComputable>();

                //Parallel.For(0, (int)this.numCountMap.Value,
                //    i =>
                //    {
                //        _listMap.Add(new AStarMap(picMap.Width, picMap.Height, rnd.Next(), (int)numCountNode.Value, (int)numDistanceMax.Value));
                //    }
                //);
                //---

                AddLog("Démarrage du monitoring");

                //--- Démarre le monitoring de thread
                ucMonitoring.StartMonitoring((short)this.numRereshRate.Value);
                //---

                _methodToStart = TypeThreading.Natif;
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }