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