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(); }
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(); } }
public Form1() { InitializeComponent(); SetAllProcessToLaunch(processes); sjf = new SJFScheduler(); }