📄 form1.vb
字号:
Public Class Form1
Public Structure process '定义进程的数据结构
Dim proname As String
Dim createtime As String
Dim proid As Integer
Dim allneedtime As Integer
Dim waittime As Integer
Dim flishtime As Integer
End Structure
Public h As Integer = 0
Public runing, maxsignal As process '定义就绪、阻塞进程队列和正在执行进程、需要唤醒进程数据结构
Public wait(9), signal(9) As process
Sub tianjia() '添加进程
Dim i, j, k As Integer
Dim n, p As String
Dim m As Double
Dim d As Date = Date.Now
Dim s As String = d.ToLongTimeString()
j = 10
For i = 0 To 9
If wait(i).proid <> 0 Then
j -= 1
End If
Next
If j = 0 Then
MsgBox("注意!" & Chr(10) & "就绪队列已满,不能再添加进程!", MsgBoxStyle.OkOnly, "警告!")
TextBox1.Text = ""
TextBox3.Text = ""
Exit Sub
Else
For i = 0 To 9
If wait(i).proid = 0 Then
p = TextBox1.Text
n = TextBox3.Text
m = Val(n)
k = m \ 2
j = (m + 1) \ 2
If TextBox1.Text = "" Then
MsgBox("注意!" & Chr(10) & "进程名不能为空,请重输!", MsgBoxStyle.OkOnly, "错误!")
TextBox1.Text = ""
TextBox3.Text = ""
TextBox1.Focus()
Exit Sub
ElseIf Len(p) > 8 Then
MsgBox("注意!" & Chr(10) & "进程名长度不能长于8,请重输1~8长度的进程名!", MsgBoxStyle.OkOnly, "错误!")
TextBox1.Text = ""
TextBox3.Text = ""
TextBox1.Focus()
Exit Sub
ElseIf TextBox3.Text = "" Then
MsgBox("注意!" & Chr(10) & "进程执行时间不能为空,请重输!", MsgBoxStyle.OkOnly, "错误!")
TextBox3.Text = ""
TextBox3.Focus()
Exit Sub
ElseIf m > 1000000000 Then
MsgBox("注意!" & Chr(10) & "进程执行时间超出范围,请重输!", MsgBoxStyle.OkOnly, "错误!")
TextBox3.Text = ""
TextBox3.Focus()
Exit Sub
ElseIf (k * 2 = m Or j * 2 = m + 1) And m > 0 Then
wait(i).proname = TextBox1.Text
wait(i).createtime = s
wait(i).allneedtime = m
h += 1
wait(i).proid = h
TextBox1.Text = ""
TextBox3.Text = ""
Else
MsgBox("注意!" & Chr(10) & "进程执行时间必须是大于零的整数,请重输!", MsgBoxStyle.OkOnly, "错误!")
TextBox3.Text = ""
TextBox3.Focus()
Exit Sub
End If
Exit For
End If
Next
End If
If TextBox5.Text = "" Then
zhixing()
Else
MsgBox("注意!" & Chr(10) & "已有进程正在执行,进程被系统插入就绪队列!", MsgBoxStyle.OkOnly, "提示!")
Exit Sub
End If
Timer2.Start()
End Sub
Sub zhixing() '启动执行进程
Dim i, j As Integer
j = 10
For i = 0 To 9
If wait(i).proid = 0 Then
j -= 1
End If
Next
If j = 0 Then
TextBox4.Text = "所有的就绪进程都已执行完了,请添加进程、唤醒阻塞进程或退出程序!"
Exit Sub
Else
maxwait()
jiuxu()
TextBox5.Text = "进程:" + runing.proname + ".exe 进程标示符:" + runing.proid.ToString + " 创建时间:" + runing.createtime + " 需要运行时间:" + runing.allneedtime.ToString + "秒 已运行时间:" + runing.flishtime.ToString + "秒。" + vbCrLf
Timer1.Start()
End If
End Sub
Sub maxwait() '请最高响应比度的就绪进程
Dim i, j As Integer
Dim max, n As Double
For i = 0 To 9
If wait(i).proid <> 0 Then
j += 1
max = (wait(i).allneedtime - wait(i).flishtime + wait(i).waittime) / wait(i).allneedtime
runing = wait(i)
Exit For
End If
Next
For i = j To 9
If wait(i).proid <> 0 Then
n = (wait(i).allneedtime - wait(i).flishtime + wait(i).waittime) / wait(i).allneedtime
If max >= n Then
max = max
Else
max = n
runing = wait(i)
End If
End If
Next
For i = 0 To 9
If runing.proid = wait(i).proid Then
wait(i).allneedtime = 0
wait(i).createtime = ""
wait(i).flishtime = 0
wait(i).proid = 0
wait(i).proname = ""
wait(i).waittime = 0
Exit For
End If
Next
End Sub
Sub jiuxu() '显示就绪进程
Dim i As Integer
TextBox4.Text = ""
For i = 0 To 9
If wait(i).proid <> 0 Then
wait(i).waittime += 1
TextBox4.Text += "进程:" + wait(i).proname + ".exe 进程标示符:" + wait(i).proid.ToString + " 创建时间:" + wait(i).createtime + " 总需运行时间:" + wait(i).allneedtime.ToString + "秒 等待时间:" + wait(i).waittime.ToString + "秒 已运行时间:" + wait(i).flishtime.ToString + "秒。" + vbCrLf
End If
Next
End Sub
Sub yunxing() '运行正在执行进程
runing.flishtime += 1
TextBox5.Text = "进程:" + runing.proname + ".exe 进程标示符:" + runing.proid.ToString + " 创建时间:" + runing.createtime + " 需要运行时间:" + runing.allneedtime.ToString + "秒 已运行时间:" + runing.flishtime.ToString + "秒。" + vbCrLf
If runing.allneedtime = runing.flishtime Then
flish()
TextBox5.Text = ""
Timer1.Stop()
zhixing()
End If
End Sub
Sub flish() '显示完成进程
TextBox6.Text += "进程:" + runing.proname + ".exe 进程标示符:" + runing.proid.ToString + " 创建时间:" + runing.createtime + " 需要运行时间:" + runing.allneedtime.ToString + "秒 已运行时间:" + runing.flishtime.ToString + "秒。" + vbCrLf
runing.allneedtime = 0
runing.createtime = ""
runing.waittime = 0
runing.flishtime = 0
runing.proid = 0
runing.proname = ""
End Sub
Sub zusai() '阻塞正在执行进程
Dim i, j As Integer
If TextBox5.Text = "" Then
MsgBox("注意!" & Chr(10) & "当前没有正在执行的进程,不能阻塞正在执行的进程!", MsgBoxStyle.OkOnly, "错误!")
Exit Sub
End If
j = 10
For i = 0 To 9
If signal(i).proid <> 0 Then
j -= 1
End If
Next
If j = 0 Then
MsgBox("注意!" & Chr(10) & "阻塞队列已满,不能再添加到阻塞队列!", MsgBoxStyle.OkOnly, "警告!")
Exit Sub
Else
For i = 0 To 9
If signal(i).proid = 0 Then
signal(i) = runing
signal(i).waittime = 0
Exit For
End If
Next
Timer1.Stop()
signalpro()
TextBox5.Text = ""
zhixing()
End If
End Sub
Sub signalpro() '显示阻塞进程
Dim i As Integer
TextBox7.Text = ""
For i = 0 To 9
If signal(i).proid <> 0 Then
signal(i).waittime += 1
TextBox7.Text += "进程:" + signal(i).proname + ".exe 进程标示符:" + signal(i).proid.ToString + " 创建时间:" + signal(i).createtime + " 总需运行时间:" + signal(i).allneedtime.ToString + "秒 等待时间:" + signal(i).waittime.ToString + "秒 已运行时间:" + signal(i).flishtime.ToString + "秒。" + vbCrLf
End If
Next
End Sub
Sub huanxing() '唤醒阻塞进程
Dim i, j, k As Integer
j = 10
For i = 0 To 9
If wait(i).proid <> 0 Then
j -= 1
End If
Next
k = 10
For i = 0 To 9
If signal(i).proid = 0 Then
k -= 1
End If
Next
If k = 0 Then
MsgBox("注意!" & Chr(10) & "阻塞队列已空,不能再唤醒阻塞进程!", MsgBoxStyle.OkOnly, "警告!")
ElseIf j = 0 Then
MsgBox("注意!" & Chr(10) & "就绪队列已满,不能再唤醒阻塞进程!", MsgBoxStyle.OkOnly, "警告!")
Else
signalwait()
For i = 0 To 9
If wait(i).proid = 0 Then
wait(i) = maxsignal
wait(i).waittime = 0
Exit For
End If
Next
For i = 0 To 9
If maxsignal.proid = signal(i).proid Then
signal(i).allneedtime = 0
signal(i).createtime = ""
signal(i).flishtime = 0
signal(i).proid = 0
signal(i).proname = ""
signal(i).waittime = 0
Exit For
End If
Next
jiuxu()
signalpro()
End If
If TextBox5.Text = "" Then
zhixing()
End If
End Sub
Sub signalwait() '求最高响应比度的阻塞进程
Dim i, j As Integer
Dim max, n As Double
For i = 0 To 9
If signal(i).proid <> 0 Then
j += 1
max = (signal(i).allneedtime - signal(i).flishtime + signal(i).waittime) / wait(i).allneedtime
maxsignal = signal(i)
Exit For
End If
Next
For i = j To 9
If signal(i).proid <> 0 Then
n = (signal(i).allneedtime - signal(i).flishtime + signal(i).waittime) / wait(i).allneedtime
If max >= n Then
max = max
Else
max = n
maxsignal = signal(i)
End If
End If
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
tianjia()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer '初始化就绪和阻塞队列
runing.allneedtime = 0
runing.waittime = 0
runing.createtime = ""
runing.flishtime = 0
runing.proid = 0
runing.proname = ""
maxsignal.allneedtime = 0
maxsignal.waittime = 0
maxsignal.createtime = ""
maxsignal.flishtime = 0
maxsignal.proid = 0
maxsignal.proname = ""
For i = 0 To 9
wait(i).allneedtime = 0
wait(i).createtime = ""
wait(i).flishtime = 0
wait(i).proid = 0
wait(i).proname = ""
wait(i).waittime = 0
signal(i).allneedtime = 0
signal(i).createtime = ""
signal(i).flishtime = 0
signal(i).proid = 0
signal(i).proname = ""
signal(i).waittime = 0
Next
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
huanxing()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
zusai()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
yunxing()
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
jiuxu()
signalpro()
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -