public Dispatcher(SchedulerUI GUI, ProcessList list, int time_quantum = -1) { this.GUI = GUI; this.list = list; this.time_quantum = time_quantum; //only for preemptive algorithms }
private void button1_Click(object sender, EventArgs e) { clearQueues(); clear_input_grid(); createQueues(); pause_start_button.Text = "Pause"; output_grid.Visible = false; process_queue.Visible = false; output_grid.RowHeadersVisible = false; // clearing the table before starting the updating output_grid.Columns.Clear(); int row_count = input_grid.RowCount - 1; if (row_count < 1) { return; } // Creating the new process list with the data in the input grid ProcessList process_list = new ProcessList(); for (int i = 0; i < row_count; i++) { DataGridViewRow row = input_grid.Rows[i]; try { int arrival_time = (int)row.Cells[1].Value; int service_time = (int)row.Cells[2].Value; process_list.add_process(arrival_time, service_time); } catch (Exception) { MessageBox.Show("Invalid data found", "Invalid data", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } //validate if (!validate_data(this.input_grid)) { MessageBox.Show("Please enter valid data, positive integers and not null fields", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // get the total time to create the new grid int total_time = process_list.get_total_time(); int total_width = splitContainer1.Panel2.Width - 50 - 30; int cell_width = total_width / total_time; output_grid.ColumnCount = total_time + 1; output_grid.RowCount = row_count; output_grid.Width = total_time * cell_width + 40; output_grid.Height = 400; output_grid.Columns[0].HeaderText = "PID"; output_grid.Columns[0].Width = 30; for (int i = 1; i < output_grid.ColumnCount; i++) { // setting up the width output_grid.Columns[i].Width = cell_width; // setting the columns to read only output_grid.Columns[i].ReadOnly = true; //setting the column headers output_grid.Columns[i].HeaderText = i - 1 + "-" + i; } // setting up the PIDs for (int i = 0; i < row_count; i++) { output_grid.Rows[i].Cells[0].Value = i + 1; } // perform the schedulng algorithm dispatcher = new Dispatcher(this, process_list, (int)time_slice_selector.Value); dispatcher.run_Dispatcher(algo_selector.SelectedIndex + 1); console_out.Text = "Process history\r\n"; output_grid.ClearSelection(); output_grid.Visible = true; process_queue.Visible = true; }