form1.vb

来自「实进程调度(先进先出调度算法).具有让进程运行」· VB 代码 · 共 242 行

VB
242
字号
Public Class Form1
    Public Structure process   '定义进程数据结构
        Dim proname As String
        Dim createtime As String
        Dim proid As Integer
        Dim allneedtime As Integer
        Dim flishtime As Integer
    End Structure
    Public h As Integer = 0     '定义就绪和阻塞队列和执行进程
    Public runing 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
        TextBox4.Text = ""
        For i = 0 To 9
            If wait(i).proid <> 0 Then
                TextBox4.Text += "进程:" + wait(i).proname + ".exe  进程标示符:" + wait(i).proid.ToString + "  创建时间:" + wait(i).createtime + "  总需运行时间:" + wait(i).allneedtime.ToString + "秒  已运行时间:" + wait(i).flishtime.ToString + "秒。" + vbCrLf
            End If
        Next
        If TextBox5.Text = "" Then
            zhixing()
        Else
            MsgBox("注意!" & Chr(10) & "已有进程正在执行,进程被系统插入就绪队列!", MsgBoxStyle.OkOnly, "提示!")
            Exit Sub
        End If
    End Sub
    Sub zhixing()            '启动执进程行程序
        Dim i As Integer
        If wait(0).proid <> 0 Then
            runing = wait(0)
            For i = 0 To 8
                wait(i) = wait(i + 1)
            Next
            wait(9).allneedtime = 0
            wait(9).createtime = ""
            wait(9).flishtime = 0
            wait(9).proname = ""
            wait(9).proid = 0
            TextBox4.Text = ""
            For i = 0 To 9
                If wait(i).proid <> 0 Then
                    TextBox4.Text += "进程:" + wait(i).proname + ".exe  进程标示符:" + wait(i).proid.ToString + "  创建时间:" + wait(i).createtime + "  需要运行时间:" + wait(i).allneedtime.ToString + "秒  已运行时间:" + wait(i).flishtime.ToString + "秒。" + vbCrLf
                End If
            Next
            yunxing()
        Else
            TextBox4.Text = "所有的就绪进程都已执行完了,请添加进程、唤醒阻塞进程或退出程序!"
            Exit Sub
        End If
    End Sub
    Sub yunxing()            '正在执行进程程序
        TextBox5.Text = "进程:" + runing.proname + ".exe  进程标示符:" + runing.proid.ToString + "  创建时间:" + runing.createtime + "  需要运行时间:" + runing.allneedtime.ToString + "秒  已运行时间:" + runing.flishtime.ToString + "秒。" + vbCrLf
        Timer1.Start()
    End Sub
    Sub shijian()            '时间变化程序
        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.flishtime = 0
        runing.proid = 0
        runing.proname = ""
    End Sub
    Sub zusai()       '进程阻塞程序
        Dim i, j, k 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
                    Exit For
                End If
            Next
            Timer1.Stop()
            TextBox7.Text = ""
            For k = 0 To 9
                If signal(k).proid <> 0 Then
                    TextBox7.Text += "进程:" + signal(k).proname + ".exe  进程标示符:" + signal(k).proid.ToString + "  创建时间:" + signal(k).createtime + "  需要运行时间:" + signal(k).allneedtime.ToString + "秒  已运行时间:" + signal(k).flishtime.ToString + "秒。" + vbCrLf
                End If
            Next
            TextBox5.Text = ""
            zhixing()
        End If
    End Sub
    Sub huanxing()              '唤醒进程程序
        Dim i As Integer
        If signal(0).proid = 0 Then
            MsgBox("注意!" & Chr(10) & "阻塞队列已空,不能再唤醒阻塞进程!", MsgBoxStyle.OkOnly, "警告!")
        ElseIf wait(9).proid <> 0 Then
            MsgBox("注意!" & Chr(10) & "就绪队列已满,不能再唤醒阻塞进程!", MsgBoxStyle.OkOnly, "警告!")
        Else
            For i = 0 To 9
                If wait(i).proid = 0 Then
                    wait(i) = signal(0)
                    Exit For
                End If
            Next
            For i = 0 To 8
                signal(i) = signal(i + 1)
            Next
            signal(9).allneedtime = 0
            signal(9).createtime = ""
            signal(9).flishtime = 0
            signal(9).proname = ""
            signal(9).proid = 0
            TextBox4.Text = ""
            For i = 0 To 9
                If wait(i).proid <> 0 Then
                    TextBox4.Text += "进程:" + wait(i).proname + ".exe  进程标示符:" + wait(i).proid.ToString + "  创建时间:" + wait(i).createtime + "  总需运行时间:" + wait(i).allneedtime.ToString + "秒  已运行时间:" + wait(i).flishtime.ToString + "秒。" + vbCrLf
                End If
            Next
            TextBox7.Text = ""
            For i = 0 To 9
                If signal(i).proid <> 0 Then
                    TextBox7.Text += "进程:" + signal(i).proname + ".exe  进程标示符:" + signal(i).proid.ToString + "  创建时间:" + signal(i).createtime + "  需要运行时间:" + signal(i).allneedtime.ToString + "秒  已运行时间:" + signal(i).flishtime.ToString + "秒。" + vbCrLf
                End If
            Next
        End If
        If TextBox5.Text = "" Then
            zhixing()
        End If
    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.createtime = ""
        runing.flishtime = 0
        runing.proid = 0
        runing.proname = ""
        For i = 0 To 9
            wait(i).allneedtime = 0
            wait(i).createtime = ""
            wait(i).flishtime = 0
            wait(i).proid = 0
            wait(i).proname = ""
            signal(i).allneedtime = 0
            signal(i).createtime = ""
            signal(i).flishtime = 0
            signal(i).proid = 0
            signal(i).proname = ""
        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
        shijian()
    End Sub
End Class

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?