-
Notifications
You must be signed in to change notification settings - Fork 0
/
fcfs.cpp
87 lines (81 loc) · 3.44 KB
/
fcfs.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "fcfs.h"
#include "ui_fcfs.h"
#include <QMessageBox>
#include "common_functions.h"
fcfs::fcfs(QWidget *parent) :
QDialog(parent),
ui(new Ui::fcfs)
{
ui->setupUi(this);
ui->process_no_label->setVisible(false);
process_desc = new process_description(this);
connect(this,SIGNAL(sendProcessDescription(QString)),process_desc,SLOT(getProcessDescription(QString)));
connect(this,SIGNAL(sendTimelineDescription(QString)),process_desc,SLOT(getTimelineDescription(QString)));
connect(this,SIGNAL(sendAWT(QString)),process_desc,SLOT(getAWT(QString)));
process_desc->show();
}
fcfs::~fcfs()
{
delete ui;
}
void fcfs::on_next_pushButton_clicked()
{
int process_no = ui->process_no_label->text().toInt();
double arrival_time = ui->arrival_time_doubleSpinBox->value();
double burst_time = ui->burst_time_doubleSpinBox->value();
list[process_no-1].set_id(process_no);
list[process_no-1].set_arrival_time(arrival_time);
list[process_no-1].set_burst_time(burst_time);
int next_process_no = (process_no % number_of_processes) + 1;
QString next_process_no_label = QString("%1").arg(next_process_no);
ui->process_no_label->setText(next_process_no_label);
QString next_process_label = QString("Process #%1:").arg(next_process_no);
ui->process_label->setText(next_process_label);
ui->arrival_time_doubleSpinBox->setValue(list[next_process_no-1].get_arrival_time());
ui->burst_time_doubleSpinBox->setValue(list[next_process_no-1].get_burst_time());
QLinkedList<process> timeline;
schedule_processess(timeline);
draw_timeline(timeline);
ui->burst_time_doubleSpinBox->setFocus();
}
void fcfs::on_back_pushButton_clicked()
{
int process_no = ui->process_no_label->text().toInt();
int back_process_no = process_no - 1;
if(back_process_no == 0){
back_process_no = number_of_processes;
}
QString back_process_no_label = QString("%1").arg(back_process_no);
ui->process_no_label->setText(back_process_no_label);
QString back_process_label = QString("Process #%1:").arg(back_process_no);
ui->process_label->setText(back_process_label);
ui->arrival_time_doubleSpinBox->setValue(list[back_process_no-1].get_arrival_time());
ui->burst_time_doubleSpinBox->setValue(list[back_process_no-1].get_burst_time());
ui->burst_time_doubleSpinBox->setFocus();
}
void fcfs::schedule_processess(QLinkedList<process> &timeline){
int i;
QVector<process> processes = list;
//Arrange processes according to arrival time
qSort(processes.begin(), processes.end(), less_than_arrival_time_based);
for (i = 0; i < number_of_processes; i++){
process current_process = processes.at(i);
if (current_process.get_burst_time() != 0){
timeline.append(current_process);
}
}
}
void fcfs::draw_timeline(const QLinkedList<process> &timeline){
QString timeline_description = timeline_drawer(timeline, list);
emit sendTimelineDescription(timeline_description);
QString process_describe = "";
for(int i = 0; i < number_of_processes; i++){
process current_process = list.at(i);
if(current_process.get_burst_time() != 0){
process_describe += QString("P%1: Arrival Time: %2, Burst Time:%3\n")
.arg(current_process.get_id()).arg(current_process.get_arrival_time())
.arg(current_process.get_burst_time());
}
}
emit sendProcessDescription(process_describe);
}