예제 #1
0
 public ThreadingNativeMethod(ThreadManagerBase threadManager, IComputable computable)
     : base(threadManager, computable)
 {
 }
예제 #2
0
        /// <summary>
        /// Arrête la résolution des maps A*
        /// </summary>
        private void StopResolving()
        {
            AddLog("Arrêt de la résolution");

            //--- Initialise le formulaire
            timer.Stop();
            SetText(lblDureeCalcul, String.Empty);
            SetText(btnStartResolving, BUTTON_START);
            SetEnabled(pnlMethode, true);
            SetEnabled(pnlParametrage, true);
            //---

            //---> Arrête la surveillance de l'application
            if (chkSynchroMonitoring.Checked)
                ucMonitoring.StopMonitoring();

            //---> Arrête la résolution des map pour la méthode de parallélisation courante
            if (_currentThreadManager != null)
                _currentThreadManager.StopComputation();

            //--- Vide la mémoire
            _listMap = null;
            _currentThreadManager = null;
            //---
        }
예제 #3
0
        private void currentThreadManager_AllCalculCompletedEvent(object sender, EventArgs e)
        {
            switch (_methodToStart)
            {
                case TypeThreading.None:
                    break;
                case TypeThreading.Natif:
                    AddLog("Parallélisation mode natif - Fin");
                    break;
                case TypeThreading.BackgroundWorker:
                    AddLog("Parallélisation mode BackgroundWorker - Fin");
                    break;
                case TypeThreading.TaskParallelLibrary:
                    AddLog("Parallélisation mode Task Parallel Library - Fin");
                    break;
                default:
                    break;
            }

            //---> Afffiche la durée de résolution
            AddLog(String.Format("Durée : {0}", DateTime.Now.Subtract(_startParallel).ToString()));

            //---> Passe à la méthode de parallélisation suivante
            _methodToStart++;

            //--- Vide de la mémoire la précédente méthode de parallélisation
            if (_currentThreadManager != null)
                _currentThreadManager.StopComputation();

            _currentThreadManager = null;
            //---

            //--- Pause de 500 ms du thread Application
            //    les threads précédents ont ainsi le temps de se terminer
            Thread.Sleep(500);
            //---

            //---> Démarre la méthode de parallélisation
            StartResolving();
        }
예제 #4
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();
            }
        }
예제 #5
0
 public ThreadingBaseMethod(ThreadManagerBase threadManager, IComputable computable)
 {
     this.computable = computable;
     this.threadManager = threadManager;
 }