forked from ihavenonickname/round-robin-simulator
/
view.py
executable file
·141 lines (108 loc) · 4.55 KB
/
view.py
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import sys
import time
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt
from controller import ProcessesHandler
class SetupWindow(QWidget):
def __init__(self):
super(SetupWindow, self).__init__()
self.setWindowTitle("Round-robin simulator")
left = QVBoxLayout()
left.addWidget(QLabel("Quantum"))
left.addWidget(QLabel("Maximum life time"))
left.addWidget(QLabel("Processes per minute"))
left.addWidget(QLabel("Chance to be I/O Bound"))
left.addWidget(QLabel("Duration of each cicle"))
right = QVBoxLayout()
self.lineEdits = []
for i in range(5):
self.lineEdits.append(QLineEdit())
right.addWidget(self.lineEdits[i])
top = QHBoxLayout()
top.addLayout(left)
top.addLayout(right)
bottom = QHBoxLayout()
self.startButton = QPushButton("Start")
self.startButton.clicked.connect(self.startSimulator)
bottom.addStretch(1)
bottom.addWidget(self.startButton)
bottom.addStretch(1)
layout = QVBoxLayout()
layout.addLayout(top)
layout.addLayout(bottom)
self.setLayout(layout)
self.setFixedSize(self.sizeHint())
self.simulatorIsOpened = False
def getInput(self):
return [int(l.text()) for l in self.lineEdits]
def startSimulator(self):
if self.simulatorIsOpened:
return
try:
values = self.getInput()
except:
QMessageBox.critical(self, "Erro", 'Valores estranhos')
return
self.w = SimulatorWindow(self, values)
self.w.showMaximized()
self.simulatorIsOpened = True
class SimulatorWindow(QWidget):
def __init__(self, setupWindow, values):
super(SimulatorWindow, self).__init__()
self.setWindowTitle("Round-Robin simulator")
self.setupWindow = setupWindow
left = QVBoxLayout()
self.waitingProcessesList = QListWidget()
left.addWidget(QLabel('Waiting'))
left.addWidget(self.waitingProcessesList)
right = QVBoxLayout()
self.readyProcessesList = QListWidget()
right.addWidget(QLabel('Ready'))
right.addWidget(self.readyProcessesList)
top = QHBoxLayout()
top.addLayout(left)
top.addLayout(right)
bottom = QVBoxLayout()
self.labels = []
self.labels.append(QLabel('current process'))
self.labels.append(QLabel('runs'))
self.labels.append(QLabel('time to create'))
self.labels.append(QLabel('finished'))
for label in self.labels:
label.setFont(QFont('Lucida Console', 20))
bottom.addWidget(label)
layout = QVBoxLayout()
layout.addLayout(top)
layout.addLayout(bottom)
self.setLayout(layout)
self.processesHandler = ProcessesHandler(parent=self,
quantum=values[0],
maxLifeTime=values[1],
maxPerMinute=values[2],
chanceToBeIoBound=values[3],
cicleDuration=values[4]/1000.0)
self.processesHandler.runCompleted.connect(self.updateInfos)
self.processesHandler.start()
def closeEvent(self, event):
self.processesHandler.stop()
self.setupWindow.simulatorIsOpened = False
def updateInfos(self):
self.readyProcessesList.clear()
for p in self.processesHandler.ready:
self.readyProcessesList.addItem(str(p))
self.waitingProcessesList.clear()
for p in self.processesHandler.waiting:
self.waitingProcessesList.addItem(str(p))
processName = str(self.processesHandler.currentProcess)
self.labels[0].setText('Current process: ' + processName)
number = str(self.processesHandler.howManyRunsInCurrentProcess)
self.labels[1].setText('Runs in current process: ' + number)
seconds = str(self.processesHandler.secondsSinceLastCreation)
self.labels[2].setText('Seconds since last creation: ' + seconds)
finished = str(self.processesHandler.processesFinished)
self.labels[3].setText('Total processes finished: ' + finished)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = SetupWindow()
w.show()
sys.exit(app.exec_())