You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.0 KiB
120 lines
4.0 KiB
from turtle import RawTurtle
|
|
import tkinter as tk
|
|
import threading
|
|
class app:
|
|
def __init__(self) -> None:
|
|
self.mainapp=tk.Tk()
|
|
self.mainapp.geometry("600x800+500+100")
|
|
self.tk()
|
|
self.mainapp.mainloop()
|
|
def drawcpu(self,cpu):
|
|
for i in cpu:
|
|
self.runpen[i].fd(50)
|
|
def drawio(self,io):
|
|
for i in io :
|
|
self.runpen[abs(i)].fd(50)
|
|
def FCFS(self):
|
|
c=self.l
|
|
iol=[]
|
|
cpu=[]
|
|
io=[]
|
|
cpul=c
|
|
while (cpul!=[]) or (iol!=[]):
|
|
if(iol!=[] and iol[0]!=[] and iol[0][0]>0):
|
|
|
|
cpul.append(iol[0])
|
|
iol.pop(0)
|
|
continue
|
|
if(cpul!=[] and cpul[0]!=[] and cpul[0][0]<0):
|
|
iol.append(cpul[0])
|
|
cpul.pop(0)
|
|
continue
|
|
|
|
if cpul==[]:
|
|
cpu.append(0)
|
|
elif cpul[0]==[]:cpul.pop(0)
|
|
|
|
elif(cpul[0][0]>0):
|
|
cpu.append(cpul[0][0])
|
|
cpul[0].pop(0)
|
|
|
|
if(iol==[]):
|
|
io.append(0)
|
|
elif(iol[0]==[]):iol.pop(0)
|
|
elif(iol[0][0]<0):
|
|
io.append(iol[0][0])
|
|
iol[0].pop(0)
|
|
|
|
print("io:",io)
|
|
print("cpu:",cpu)
|
|
print("iol:",iol)
|
|
print("cpul:",cpul)
|
|
threading.Thread(target=lambda:self.drawcpu(cpu)).start()
|
|
threading.Thread(target=lambda:self.drawio(io)).start()
|
|
|
|
def creat(self,p):
|
|
self.num+=1
|
|
p=[int(x) for x in p]
|
|
self.timesum+=sum(p)
|
|
self.l.append([self.num]*p[0]+[-self.num]*p[1]+[self.num]*p[2])
|
|
self.createntry.delete(0,"end")
|
|
self.b1=tk.Button()
|
|
self.creatpen.color("black")
|
|
self.creatpen.pensize(1)
|
|
self.creatpen.pu()
|
|
self.creatpen.goto(self.creatposition)
|
|
self.creatpen.pd()
|
|
self.creatpen.write("进程{}".format(self.num),font=(None,15))
|
|
self.creatpen.fd(70)
|
|
self.creatpen.left(90)
|
|
self.creatpen.fd(9)
|
|
self.creatpen.right(90)
|
|
self.creatpen.color("red")
|
|
self.creatpen.pensize(20)
|
|
for i in p:
|
|
self.creatpen.fd(i*50)
|
|
self.creatpen.color("red" if self.creatpen.color()!=('red', 'red') else "green")
|
|
self.runpen.append(RawTurtle(self.draw))
|
|
self.runpen[self.num].hideturtle()
|
|
self.runpen[self.num].speed(0)
|
|
self.runpen[self.num].color("blue")
|
|
self.runpen[self.num].pensize(20)
|
|
self.runpen[self.num].pu()
|
|
self.runpen[self.num].goto(self.creatposition[0]+70,self.creatposition[1]+9)
|
|
self.runpen[self.num].pd()
|
|
self.runpen[self.num].speed(1)
|
|
self.creatposition[1]-=30
|
|
def creatset(self):
|
|
self.runpen=[]
|
|
self.creatpen.clear()
|
|
self.l=[]
|
|
self.timesum=0
|
|
self.num=0
|
|
self.creatposition=[-270,200]
|
|
self.runpen.append(RawTurtle(self.draw))
|
|
self.runpen[0].hideturtle()
|
|
self.runpen[0].speed(0)
|
|
self.runpen[0].color("blue")
|
|
self.runpen[0].pensize(20)
|
|
self.runpen[0].pu()
|
|
self.runpen[0].goto(-270,300)
|
|
self.runpen[0].speed(1)
|
|
|
|
def tk(self):
|
|
self.draw=tk.Canvas(self.mainapp,width=600,height=600)
|
|
self.draw.pack()
|
|
self.ui=tk.Frame(self.mainapp,width=600,height=200)
|
|
self.ui.pack()
|
|
self.createntry=tk.Entry(self.ui,width=60)
|
|
self.createntry.place(x=10,y=10)
|
|
self.creatpen=RawTurtle(self.draw)
|
|
self.creatpen.pen(speed=0,shown=False)
|
|
self.creatset()
|
|
self.creatbutton=tk.Button(self.ui,width=20,text="creat",command=lambda:self.creat(self.createntry.get().split(",")))
|
|
self.creatbutton.place(x=440,y=8)
|
|
self.clearbuttom=tk.Button(self.ui,width=20,text="clear",command=self.creatset)
|
|
self.clearbuttom.place(x=440,y=40)
|
|
self.FCFSbuttom=tk.Button(self.ui,width=20,text="FCFS",command=self.FCFS)
|
|
self.FCFSbuttom.place(x=440,y=80)
|
|
pass
|
|
app() |