//This Function Runs in a new Thread private void StartTaskGeneration(Object threadObject) { bool bStatus; CThreadObject to = (CThreadObject)threadObject; CConfiguration config = to.config; List <CPeriodSet> periodSets; List <double> executionTimes; List <double> releaseOffsets; //Set Global Vars _config = config; _taskCount = 1; _allTaskSets = new List <CTaskSet>(); //Generate Period Sets UpdateStatus("Calling Period Generator ..."); IPeriodGenerator pg = (IPeriodGenerator)_internalConfig.selectedPeriodGenerator.objMain; //try //{ periodSets = pg.GetPeriods(config, null); //} //catch (Exception e) //{ //if(pg != null) // MessageBox.Show("Error in Period Generation. Message from selected Plug In : " + pg.Message); //else // MessageBox.Show("Error in Period Generation." + e.Message); //return; //} AddRunTimeMessage("Period Generator", pg.Message); //Generate Execution Times UpdateStatus("Calling Execution Time Generator ..."); IExecutionTimeGenerator etg = (IExecutionTimeGenerator)_internalConfig.selectedExecutionTimeGenerator.objMain; try { executionTimes = etg.GetExecutionTimes(config); } catch (Exception e) { if (etg != null) { MessageBox.Show("Error in Execution Time Generation. Message from selected Plug In : " + etg.Message); } else { MessageBox.Show("Error in Execution Time Generation." + e.Message); } return; } AddRunTimeMessage("Execution Time Generator", etg.Message); //Generate Release Offset UpdateStatus("Calling Release Offset Generator ..."); IReleaseOffsetGenerator rog = (IReleaseOffsetGenerator)_internalConfig.selectedReleaseOffsetGenerator.objMain; try { releaseOffsets = rog.GetReleaseOffsets(config); } catch (Exception e) { if (rog != null) { MessageBox.Show("Error in Release Offset Generation. Message from selected Plug In : " + rog.Message); } else { MessageBox.Show("Error in Release Offset Generation." + e.Message); } return; } AddRunTimeMessage("Release Offsets", rog.Message); //Create Callback Function UpdateStatus("Setting Callback Function ..."); CCallBack cb = new CCallBack(); cb.funcReceivedTaskSet += CheckSchedulability; //Call Task Set Generator UpdateStatus("Calling Task Generator..."); ITaskSetGenerator tsg = (ITaskSetGenerator)_internalConfig.selectedTaskSetGenerator.objMain; try { tsg.GenerateTaskSets(periodSets, executionTimes, releaseOffsets, config, cb); } catch (Exception e) { if (tsg != null) { MessageBox.Show("Error in Task Set Generation. Message from Selected Plug In : " + tsg.Message); } else { MessageBox.Show("Error in Task Set Generation." + e.Message); } return; } AddRunTimeMessage("Task Set Generator", tsg.Message); //Write Task Set Files UpdateStatus("Writing Task Files..."); if (checkBoxPruneFolder.Checked) { //Delete Files DeleteFilesFromFolder(to.folderPathforFiles); } IFileFormatter ff = (IFileFormatter)_internalConfig.selectedFileFormatter.objMain; try { bStatus = ff.WriteFiles(_allTaskSets, to.folderPathforFiles, config); } catch (Exception e) { if (tsg != null) { MessageBox.Show("Error in Task Set Generation. Message from Selected Plug In : " + tsg.Message); } else { MessageBox.Show("Error in Task Set Generation." + e.Message); } return; } AddRunTimeMessage("File Formatter", ff.Message); UpdateStatus("Task Set Generation Complete"); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStart_Click(object sender, EventArgs e) { //Test for //List<List<double>> c; //List<double> main = new List<double>(); //main.Add(0); main.Add(1); main.Add(2); main.Add(3); main.Add(4); //CCombinationGenerator comb = new CCombinationGenerator(); //c = comb.GenerateCombinations(main, 3); //return; double maxLCM, LCM; int noOfTasks; List <CPeriodSet> periods; if (textTasksToGen.Text.Trim() != "") { noOfTasks = Convert.ToInt32(textTasksToGen.Text); } else { noOfTasks = 100; } CConfiguration oConfig = CConfiguration.GetObject(noOfTasks, Convert.ToInt32(textTasksPerSet.Text), Convert.ToDouble(textMinTaskPeriod.Text), Convert.ToDouble(textMaximumTaskPeriod.Text), 1, 10, 0, 0); IPeriodGenerator oPeriodGen = null; //Select Period Generator switch (comboPeriodMethod.SelectedIndex) { case 0: oPeriodGen = new CBoundedPeriods(); break; case 1: oPeriodGen = new CRandomPeriods(); break; case 2: oPeriodGen = new CAllPeriods(); break; default: break; } //Determine maximum possible periods UpdateStatus("Computing Number of Period Sets ..."); textNumberOfTaskSets.Text = oPeriodGen.GetMaximumUniquePeriodSets(oConfig).ToString(); textNumberOfPossibleTaskSets.Text = GetMaximumPossibleSets(oConfig).ToString(); UpdateStatus("Generating Period Sets ..."); periods = oPeriodGen.GetPeriods(oConfig, new CSieveOfEratosthenes()); listMain.Items.Clear(); listMain.Items.Add("<Periods>, LCM"); UpdateStatus("Displaying Period Sets ..."); maxLCM = 0; foreach (CPeriodSet period in periods) { Application.DoEvents(); LCM = period.GetLCM(); if (LCM > maxLCM) { maxLCM = LCM; } //listMain.Items.Add(period.GetPeriodString() + "," + LCM.ToString()); listMain.Items.Add(LCM.ToString()); if (listMain.Items.Count == oConfig.NumberOfTaskSets) { break; } } textLCM.Text = maxLCM.ToString(); UpdateStatus("Ready"); }