📄 devise.cs
字号:
using System;
using System.Collections;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace os
{
public class devise : jincheng
{
public int number;
public ListView listview, blockview;
public class devs//三个类型的设备类
{
public char devtype;//类型名
public diveses[] df = new diveses[3];//A设备有三个
public Queue waitpro = new Queue();//阻塞队列
}
public struct diveses
{
public int dtime;
public pcb dpcb;
public tstate dstate;
}
public devs[] dev = new devs[3];
public string reason;
public void init()//初始化设备
{
dev[0] = new devs();
dev[1] = new devs();
dev[2] = new devs();
dev[0].devtype = 'A';
dev[1].devtype = 'B';
dev[2].devtype = 'C';
for (int j = 0; j < 3; j++)
for (int i = 0; i < 3; i++)
dev[j].df[i].dstate = tstate.free;
dev[1].df[2].dstate = tstate.used;//这个设备永远不可用
dev[2].df[1].dstate = tstate.used;//这个设备永远不可用
dev[2].df[2].dstate = tstate.used;//这个设备永远不可用
}
public devise(ListView listview_,ListView blockview_)
{
listview = listview_;
blockview = blockview_;
init();
//构造函数
}
public bool requestdev(pcb process,ListView steady)//申请设备
{
int i, j, k = 0;
for (j = 0; j < 3; j++)
if (dev[j].devtype == process.wantdev)
k = j;
for (j = 0; j < 3; j++)
{
for (i = 0; i < 3; i++)
{
if (dev[j].devtype == process.wantdev && dev[j].df[i].dstate == tstate.free)
{
dev[j].df[i].dtime = process.wanttime;
dev[j].df[i].dpcb = process;
dev[j].df[i].dstate = tstate.used;
if (dev[j].devtype != 'C')
{
listview.Items[3 * j + i].SubItems[2].Text = process.wanttime.ToString();
listview.Items[3 * j + i].SubItems[1].Text = process.name.ToString();
}
else
{
listview.Items[5].SubItems[2].Text = process.wanttime.ToString();
listview.Items[5].SubItems[1].Text = process.name.ToString();
}
reason = process.name + "申请设备" + process.wantdev + "成功";
blockview.Items.Add(reason);
return true;
}
}
}
reason = process.name + "申请设备" + process.wantdev + "失败";
blockview.Items.Add(reason);
dev[k].waitpro.Enqueue(process);
return false;
}
public pcb releasedev(ref diveses df, devs devsqueue,process pro)//释放设备a
{
pcb dpcb = NULL;
df.dstate = tstate.free;
df.dtime = 0;
df.dpcb = NULL;
if (devsqueue.waitpro.Count != 0)
{
dpcb = (pcb)devsqueue.waitpro.Dequeue();
if (pro.BlockView.Items.Count != 0)
pro.BlockView.Items.RemoveAt(0);
requestdev(dpcb, pro.ListView);
}
dpcb = (pcb)pro.blockqueue.dequeue(pro.blockqueue);
return dpcb;
}
public void devtimer(Queue proc,process pro)//设备计时器
{
int j, i = 0;
for (j = 0; j < 3; j++)
for (i = 0; i < 3; i++)
{
if (dev[j].df[i].dstate == tstate.used)
{
if ((j * 3 + i) > 5)
{
dev[j].df[i].dtime--;
number = int.Parse(listview.Items[5].SubItems[2].Text) - 1;
listview.Items[5].SubItems[2].Text = number.ToString();
}
else
{
dev[j].df[i].dtime--;
number = int.Parse(listview.Items[3 * j + i].SubItems[2].Text) - 1;
listview.Items[3 * j + i].SubItems[2].Text = number.ToString();
}
}
if (dev[j].df[i].dstate == tstate.used && dev[j].df[i].dtime == 0)
{
if ((j * 3 + i) > 5)
{
listview.Items[5].SubItems[1].Text = "空闲";
listview.Items[5].BackColor = Color.Lime;
proc.Enqueue((releasedev(ref dev[j].df[i], dev[j], pro)));
}
else
{
listview.Items[3 * j + i].SubItems[1].Text = "空闲";
listview.Items[3 * j + i].BackColor = Color.Lime;
proc.Enqueue((releasedev(ref dev[j].df[i], dev[j], pro)));
}
}
if (dev[j].df[i].dtime != 0)
{
if ((j * 3 + i) > 5)
{
listview.Items[5].SubItems[1].Text = dev[j].df[i].dpcb.name;
listview.Items[5].BackColor = Color.Fuchsia;
}
else
{
listview.Items[3 * j + i].SubItems[1].Text = dev[j].df[i].dpcb.name;
listview.Items[3 * j + i].BackColor = Color.Fuchsia;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -