public Dispatcher(ICompressionStrategy compressionStrategy, IFileFormatter fileFormatter) { _compressionStrategy = compressionStrategy; _fileFormatter = fileFormatter; _workers = new Worker[Environment.ProcessorCount]; for (int i = 0; i < _workers.Length; i++) { _workers[i] = new Worker(MaxPendingResults / Environment.ProcessorCount); } }
//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"); }
private void RunSimulation() { bool bStatus; IExecutionModel em = (IExecutionModel)_internalConfig.selectedExecutionModel.objMain; IFileFormatter ff = (IFileFormatter)_internalConfig.selectedFileFormatter.objMain; IDiscreteExecutionTraceWriter etw = (IDiscreteExecutionTraceWriter)_internalConfig.selectedExecutionTraceWriter.objMain; string sFileContents; string sFileName; CTaskSet ts; if (textFolderName.Text.Trim() == "") { MessageBox.Show("Please select a Valid Folder"); return; } DirectoryInfo di = new DirectoryInfo(textFolderName.Text); if (!di.Exists) { MessageBox.Show("Selected folder does not exists"); return; } FileInfo[] rgFiles = di.GetFiles("*.*"); foreach (FileInfo fi in rgFiles) { //Iterate over Task Set Application.DoEvents(); UpdateStatus("Reading and parsing file " + fi.Name); sFileContents = ReadFromFile(fi.FullName); ts = ff.ParseTaskSet(sFileContents); UpdateStatus("Processing file " + fi.Name + " till " + ts.HyperPeriod + " steps ..."); bStatus = em.SimulateExecution(ts); if (bStatus) { AddTaskSetSchedulability(fi.Name + ", TRUE" + ", Last Time: " + em.LastDiscreteTimeValue.ToString()); } else { AddTaskSetSchedulability(fi.Name + ", FALSE" + ", Last Time: " + em.LastDiscreteTimeValue.ToString()); } CDiscreteTimeExecutionData dted = new CDiscreteTimeExecutionData(); dted.hp = ts.HyperPeriod; dted.sFileName = fi.Name; dted.executionTrace = em.ExecutionTrace; AddDiscreteTimeExecution(dted); if (textTraceFolder.Text.Trim() != "") { //Convert 1.txt to 1_txt sFileName = fi.Name.Replace('.', '_'); //Write to File etw.WriteFile(dted.executionTrace, textTraceFolder.Text.Trim(), sFileName, _config); } } UpdateStatus("Completed processing of all files"); }