public ThreadingNativeMethod(ThreadManagerBase threadManager, IComputable computable) : base(threadManager, computable) { }
/// <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; //--- }
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(); }
/// <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(); } }
public ThreadingBaseMethod(ThreadManagerBase threadManager, IComputable computable) { this.computable = computable; this.threadManager = threadManager; }