⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.vb

📁 实进程调度(先进先出调度算法).具有让进程运行
💻 VB
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -