?? frm_main.frm
字號:
EndProperty
BeginProperty ColumnHeader(2) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 1
Text = "使用時間片"
Object.Width = 1941
EndProperty
BeginProperty ColumnHeader(3) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 2
Text = "需要時間片"
Object.Width = 1941
EndProperty
BeginProperty ColumnHeader(4) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 3
Text = "優先級"
Object.Width = 1342
EndProperty
BeginProperty ColumnHeader(5) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 4
Text = "狀態"
Object.Width = 811
EndProperty
End
Begin VB.Timer Timer3
Enabled = 0 'False
Interval = 55
Left = 2520
Top = 4920
End
Begin VB.Timer Timer2
Enabled = 0 'False
Interval = 55
Left = 2040
Top = 4920
End
Begin VB.Timer Timer1
Enabled = 0 'False
Interval = 55
Left = 1560
Top = 4920
End
Begin MSComctlLib.ListView P_Finish
Height = 2295
Left = 240
TabIndex = 5
Top = 3360
Width = 3975
_ExtentX = 7011
_ExtentY = 4048
View = 3
LabelWrap = -1 'True
HideSelection = -1 'True
FullRowSelect = -1 'True
GridLines = -1 'True
HotTracking = -1 'True
_Version = 393217
ForeColor = -2147483640
BackColor = -2147483643
BorderStyle = 1
Appearance = 0
NumItems = 5
BeginProperty ColumnHeader(1) {BDD1F052-858B-11D1-B16A-00C0F0283628}
Text = "名稱"
Object.Width = 988
EndProperty
BeginProperty ColumnHeader(2) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 1
Text = "使用時間片"
Object.Width = 1941
EndProperty
BeginProperty ColumnHeader(3) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 2
Text = "需要時間片"
Object.Width = 1941
EndProperty
BeginProperty ColumnHeader(4) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 3
Text = "優先級"
Object.Width = 1342
EndProperty
BeginProperty ColumnHeader(5) {BDD1F052-858B-11D1-B16A-00C0F0283628}
SubItemIndex = 4
Text = "狀態"
Object.Width = 811
EndProperty
End
Begin MSComctlLib.Slider Slider1
Height = 255
Left = 120
TabIndex = 35
Top = 6120
Width = 4215
_ExtentX = 7435
_ExtentY = 450
_Version = 393216
LargeChange = 1
Min = 1
Max = 3
SelStart = 2
Value = 2
End
Begin VB.Label Label16
Alignment = 2 'Center
AutoSize = -1 'True
Caption = "動畫速度(速度加快V1.01版)"
Height = 180
Left = 240
TabIndex = 36
Top = 5880
Width = 2250
End
Begin VB.Label Label3
Alignment = 2 'Center
BackColor = &H008080FF&
Caption = "完成的進程"
ForeColor = &H00FFFFFF&
Height = 180
Left = 240
TabIndex = 2
Top = 3120
Width = 3960
End
Begin VB.Shape Shape3
BackColor = &H00FFC0C0&
BackStyle = 1 'Opaque
Height = 2775
Left = 120
Top = 3000
Width = 4215
End
Begin VB.Label Label2
Alignment = 2 'Center
BackColor = &H008080FF&
Caption = "就緒的進程"
ForeColor = &H00FFFFFF&
Height = 180
Left = 240
TabIndex = 1
Top = 240
Width = 3960
End
Begin VB.Shape Shape2
BackColor = &H00C0FFC0&
BackStyle = 1 'Opaque
Height = 2775
Left = 120
Top = 120
Width = 4215
End
Begin VB.Label Label1
Alignment = 2 'Center
BackColor = &H008080FF&
Caption = "正在運行的進程"
ForeColor = &H00FFFFFF&
Height = 180
Left = 4680
TabIndex = 0
Top = 240
Width = 3960
End
Begin VB.Shape Shape1
BackColor = &H00C0FFFF&
BackStyle = 1 'Opaque
Height = 2535
Left = 4560
Top = 120
Width = 4215
End
End
Attribute VB_Name = "Frm_Main"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'**********************************************************
'* LingLanX STUDIO *
'* E_Mail:LianLan1@sian.com *
'* OICQ: 64775590 *
'* 2002-5-13 *
'* 操作系統進程調度模擬 *
'**********************************************************
'* 姓名:王煜冬 *
'* 班級:9901-8 *
'* 學號:19992161 *
'**********************************************************
'定義全局變量
Dim mItem As ListItem '定義ListItem對象,用于把數據插入ListView控件(這樣速度很快)。
Dim PRI As Boolean '判斷是否采用優先數法(PRI=True)
Dim P_Run As PCB '存放當前運行的進程控制塊中的數據
Dim Proc() As PCB '存放模擬的進程
Dim Proc_B() As PCB '備份模擬的進程(用于比較模式)
Dim Proc_T() As Integer '存放進程結束時所用的總時間片數
Dim N, i As Integer 'N存放模擬的進程數(默認為6)
Dim TimeChip As Integer '每個CPU單位分配的時間片(默認為2)
Dim Sum As Integer '存放總調度次數
Dim NSum As Integer '存放總時間片數
Dim A, B As Integer '存放隨機數上下界
Dim Pause_R As Integer '存放被暫停的Timer
Dim Comp_P As Integer '用于判斷是否運行比較模式(-1表示否)
Dim Comp_T As String '用于存放比較結果
Private Function Get_R(ByVal NCPU As Integer, ByVal CPU As Integer) As Integer '計算分配的CPU單位(輪轉發)
Get_R = Int((NCPU - CPU) / 3) + 1
End Function
Private Sub P_Index() '對進程按優先數進行排序,并加入到P_Ready(ListView控件)中
Dim T As PCB '用于在排序過程中臨時存放數據
'用 冒泡排序法按 優先級 降序 進行排序
For i = 1 To N
For j = 1 To N - 1
If Proc(i).P_PRI >= Proc(j).P_PRI Then
'交換數據
T = Proc(i)
Proc(i) = Proc(j)
Proc(j) = T
End If
Next j
Next i
'清除就緒隊列
P_Ready.ListItems.Clear
'向就緒隊列中插入進程
For i = 1 To N
If Proc(i).P_State <> "F" Then
'初始化mItem對象,并向P_Ready(ListView控件)中添加數據
Set mItem = P_Ready.ListItems.Add(, Proc(i).P_Name, Proc(i).P_Name)
mItem.ListSubItems.Add Key:="A" + Proc(i).P_Name, Text:=Trim(Proc(i).P_CPU)
mItem.ListSubItems.Add Key:="B" + Proc(i).P_Name, Text:=Trim(Proc(i).P_NCPU)
mItem.ListSubItems.Add Key:="C" + Proc(i).P_Name, Text:=Trim(Proc(i).P_PRI)
mItem.ListSubItems.Add Key:="D" + Proc(i).P_Name, Text:=Trim(Proc(i).P_State)
End If
Next i
End Sub
Private Sub Start_P() '開始
Picture1.Visible = False
'取得就緒站頂的PCB放入P_Run
P_Run.P_Name = P_Ready.ListItems(1).Text
P_Run.P_CPU = CInt(P_Ready.ListItems(1).ListSubItems(1).Text)
P_Run.P_NCPU = CInt(P_Ready.ListItems(1).ListSubItems(2).Text)
P_Run.P_PRI = CInt(P_Ready.ListItems(1).ListSubItems(3).Text)
P_Run.P_State = P_Ready.ListItems(1).ListSubItems(4).Text
'初始化控件
Text1.Text = P_Run.P_Name
Label7.Caption = CStr(P_Run.P_CPU)
'初始化完成度進度條
PB2.Max = P_Run.P_NCPU
PB2.Value = P_Run.P_CPU
Label11.Caption = CStr(P_Run.P_PRI)
'把PCB從P_Ready中移除
P_Ready.ListItems.Remove (1)
'初始化移動Bar(TextBox控件)的位置
Text1.Top = W_Top
Text1.Left = W_Left
Text1.Visible = True
'判斷是否為輪轉法
If Not (PRI) Then
'根據CPU單位計算時間片數
TimeChip = CInt(Text3.Text)
TimeChip = TimeChip * P_Run.P_PRI
End If
Label6.Caption = CStr(TimeChip)
'初始化時間片進度條
PB1.Max = TimeChip
PB1.Value = TimeChip
'開始移動控件
Timer1.Enabled = True
End Sub
Private Sub P_End() '完成和結束處理
Dim Prompt_F As String
'隱藏移動Bar
Text1.Visible = False
P_Run.P_State = "F"
'紀錄進程結束時間片
Proc_T(CInt(Mid(P_Run.P_Name, 3, Len(P_Run.P_Name) - 2))) = NSum
'置完成的PCB(用于判斷是否向P_Ready中添加)狀態
If PRI Then
For i = 1 To N - 1
Proc(i) = Proc(i + 1)
Next i
Proc(N) = P_Run
Proc(N).P_PRI = -10000
End If
'把該進程加入到P_Finish(ListView控件)完成隊列中
Set mItem = P_Finish.ListItems.Add(, "P" + P_Run.P_Name, P_Run.P_Name)
mItem.ListSubItems.Add Key:="A" + P_Run.P_Name, Text:=Trim(P_Run.P_CPU)
mItem.ListSubItems.Add Key:="B" + P_Run.P_Name, Text:=Trim(P_Run.P_NCPU)
mItem.ListSubItems.Add Key:="C" + P_Run.P_Name, Text:=Trim(P_Run.P_PRI)
mItem.ListSubItems.Add Key:="D" + P_Run.P_Name, Text:=Trim(P_Run.P_State)
'判斷是否結束
If P_Ready.ListItems.Count > 0 Then
Start_P
Else
'如果結束
If Comp_P = -1 Then
'如果是正常模式
'生成結果文本
Prompt_F = Me.Caption + vbCrLf + "所有進程運行完成! " + vbCrLf + vbCrLf + "模擬進程:" + CStr(N) + "個" + vbCrLf
Prompt_F = Prompt_F + "總時間片:" + CStr(NSum) + "片" + vbCrLf + "調度次數:" + CStr(Sum) + "次" + vbCrLf + "每CPU單位分配的時間片數:" + Text3.Text + vbCrLf + vbCrLf
Prompt_F = Prompt_F + "名稱 需要時間片數 優先級/CPU單位 結束時間片" + vbCrLf
For i = 1 To N
Prompt_F = Prompt_F + Proc_B(i).P_Name + " " + CStr(Proc_B(i).P_NCPU) + " " + CStr(Proc_B(i).P_PRI) + " " + CStr(Proc_T(i)) + vbCrLf
Next i
'本結果賦給Frm_Result.Text1
Frm_Result.Text1.Text = Prompt_F
'顯示結果
Frm_Result.Show vbModal
Else
If Comp_P = 1 Then
'如果是比較模式的第一次運行
'改變標志,表示已經運行過一次
Comp_P = Comp_P - 1
'生成結果文本
Comp_T = Me.Caption + vbCrLf + "所有進程運行完成! " + vbCrLf + vbCrLf + "模擬進程:" + CStr(N) + "個" + vbCrLf
Comp_T = Comp_T + "總時間片:" + CStr(NSum) + "片" + vbCrLf + "調度次數:" + CStr(Sum) + "次" + vbCrLf + "每CPU單位分配的時間片數:" + Text3.Text + vbCrLf + vbCrLf
Comp_T = Comp_T + "名稱 需要時間片數 優先級/CPU單位 結束時間片" + vbCrLf
For i = 1 To N
Comp_T = Comp_T + Proc_B(i).P_Name + " " + CStr(Proc_B(i).P_NCPU) + " " + CStr(Proc_B(i).P_PRI) + " " + CStr(Proc_T(i)) + vbCrLf
Next i
'判斷運行過的算法,設置未運行的算法為當前算法
If PRI Then
Option2.Value = True
Else
Option1.Value = True
End If
'清除就緒隊列
P_Ready.ListItems.Clear
'利用備份數據重新初始化Proc()
For i = 1 To N
Proc(i) = Proc_B(i)
If PRI Then
Proc(i).P_PRI = Int((36 - Proc(i).P_NCPU) / 3)
Else
Proc(i).P_PRI = Get_R(Proc(i).P_NCPU, Proc(i).P_CPU)
End If
Proc_B(i) = Proc(i)
'把新數據加入到就緒隊列中
Set mItem = P_Ready.ListItems.Add(, Proc(i).P_Name, Proc(i).P_Name)
mItem.ListSubItems.Add Key:="A" + Proc(i).P_Name, Text:=Trim(Proc(i).P_CPU)
mItem.ListSubItems.Add Key:="B" + Proc(i).P_Name, Text:=Trim(Proc(i).P_NCPU)
mItem.ListSubItems.Add Key:="C" + Proc(i).P_Name, Text:=Trim(Proc(i).P_PRI)
mItem.ListSubItems.Add Key:="D" + Proc(i).P_Name, Text:=Trim(Proc(i).P_State)
Next i
'重新開始運行
Start.Value = True
Exit Sub
Else
'運行全部結束
'設置標志位
Comp_P = Comp_P - 1
'繼續生成結果文本
Comp_T = Comp_T + vbCrLf + Me.Caption + vbCrLf + "所有進程運行完成! " + vbCrLf + vbCrLf + "模擬進程:" + CStr(N) + "個" + vbCrLf
Comp_T = Comp_T + "總時間片:" + CStr(NSum) + "片" + vbCrLf + "調度次數:" + CStr(Sum) + "次" + vbCrLf + "每CPU單位分配的時間片數:" + Text3.Text + vbCrLf + vbCrLf
Comp_T = Comp_T + "名稱 需要時間片數 優先級/CPU單位 結束時間片" + vbCrLf
For i = 1 To N
Comp_T = Comp_T + Proc_B(i).P_Name + " " + CStr(Proc_B(i).P_NCPU) + " " + CStr(Proc_B(i).P_PRI) + " " + CStr(Proc_T(i)) + vbCrLf
Next i
Frm_Result.Text1.Text = Comp_T
Comp_T = ""
'顯示結果
Frm_Result.Show vbModal
End If
End If
'恢復按鍵功能
SSTab1.Enabled = True
Simulation.Enabled = True
Start.Enabled = True
Comp.Enabled = True
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -