Пример #1
0
        static void Main(string[] args)
        {
            TimerCallback           callback    = null;
            Timer                   timer       = null;
            CancellationTokenSource tokenSource = new CancellationTokenSource();
            CancellationToken       token       = tokenSource.Token;
            List <ProcessDomain>    processes   = new List <ProcessDomain>
            {
                new ProcessDomain {
                    ProcessName = "p0", ProcessID = 4, State = ProcessState.Running, Priority = ProcessPriority.Normal
                },
                new ProcessDomain {
                    ProcessName = "p1", ProcessID = 5, State = ProcessState.Completed, Priority = ProcessPriority.Normal
                },
                new ProcessDomain {
                    ProcessName = "p2", ProcessID = 6, State = ProcessState.Completed, Priority = ProcessPriority.Normal
                },
                new ProcessDomain {
                    ProcessName = "p3", ProcessID = 7, State = ProcessState.Completed, Priority = ProcessPriority.Normal
                }
            };

            foreach (var item in GetAllProcess(processes))
            {
                Console.WriteLine(item);
            }

            ClockGenerator clock = new ClockGenerator(callback, timer);
            SJFScheduler   sjf   = new SJFScheduler(processes);

            //var runTasks = sjf.StartConvertToRunningOperation(token);
            //var resTask = sjf.Start(token);


            //nonpreemptive imitation
            Thread.Sleep(500);
            sjf.AddProcess(new ProcessDomain {
                ProcessName = "p3", ProcessID = 8, State = ProcessState.New, Priority = ProcessPriority.Normal
            });

            //resTask.Wait();

            //if (resTask.IsCompleted)
            //{
            //    foreach (var res in resTask.Result)
            //    {
            //        Console.WriteLine(res);
            //    }
            //}
            //clock.Stop();
            //Console.Read();
        }
Пример #2
0
        private async void static_Init_Click(object sender, EventArgs e)
        {
            Source              = new CancellationTokenSource();
            begin_Init.Enabled  = false;
            add_process.Enabled = false;
            timer_tick.Interval = 1000;
            timer_tick.Tick    += new EventHandler(timer_tick_Tick);
            timer_tick.Start();
            stopwatch.Start();
            sjf = new SJFScheduler(processes);
            List <ProcessDomain> local = new List <ProcessDomain>();

            try
            {
                if (processes.Count != 0)
                {
                    foreach (var item in processes)
                    {
                        processDataGridView.Rows.Add(item.ProcessName, item.ProcessID, item.ArrivalTime, item.CompletionTime, item.Burst_Time, item.Priority, item.State);
                    }

                    var runTasks = await Task.Run(() => sjf.StartConvertToRunningOperation(Source.Token));

                    var resTask = await Task.Run(() => sjf.Start(Source.Token));


                    local = resTask;
                    if (local.Count != 0 && !Source.IsCancellationRequested)
                    {
                        foreach (var res in local)
                        {
                            processDataGridView.Rows.Add(res.ProcessName, res.ProcessID, res.ArrivalTime, res.CompletionTime, res.Burst_Time, res.Priority, res.State);
                        }
                        SetAllProcessToLaunch(processes);
                        begin_Init.Enabled  = true;
                        add_process.Enabled = true;
                    }
                    else
                    {
                        foreach (var res in local)
                        {
                            if (res.State == ProcessState.Completed)
                            {
                                processDataGridView.Rows.Add(res.ProcessName, res.ProcessID, res.ArrivalTime, res.CompletionTime, res.Burst_Time, res.Priority, res.State);
                            }
                        }
                        SetAllProcessToLaunch(processes);
                        begin_Init.Enabled  = true;
                        add_process.Enabled = true;
                    }
                }
                else
                {
                    MessageBox.Show("Inner process list doesn't have any process", "List Exception");
                    begin_Init.Enabled  = true;
                    add_process.Enabled = true;
                }
            }
            catch (OperationCanceledException ex)
            {
                MessageBox.Show(ex.Message, "Operation Canceled Exception");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Source.Dispose();
                timer_tick.Stop();
                stopwatch.Stop();
                Timer_Label.Text = stopwatch.Elapsed.Seconds.ToString();
            }
        }
Пример #3
0
 public Form1()
 {
     InitializeComponent();
     SetAllProcessToLaunch(processes);
     sjf = new SJFScheduler();
 }