示例#1
0
 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);
     }
 }
示例#2
0
        //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");
        }
示例#3
0
        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");
        }