/// <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(); } }
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; } }