示例#1
0
        //
        //BlockProcess函数,阻塞进程
        //
        public void BlockProcess(int a, DeviceType b, int time)
        {
            //
            //保护CPU现场
            //
            PCBArray[a].PC = PC;
            PCBArray[a].IR = IR;
            PCBArray[a].DR = DR;
            //
            //判断申请设备是否成功,根据不同情况填写BlockReason项
            //
            bool d = Dev.JudgeDevice(b);

            if (d == false)
            {
                PCBArray[a].NeedDevice  = b;
                PCBArray[a].HaveDevice  = DeviceType.no;
                PCBArray[a].BlockReason = "申请" + b + "设备失败";
                PCBArray[a].PC          = PCBArray[a].PC - 4;
            }
            else
            {
                PCBArray[a].DN            = Dev.Allocate(b);
                PCBArray[a].HaveDevice    = b;
                PCBArray[a].NeedDevice    = DeviceType.no;
                PCBArray[a].GetDeviceTime = XDTime;
                PCBArray[a].WaitTime      = time;
                PCBArray[a].BlockReason   = "等待IO输入输出";
                if (DeviceStateChange != null)
                {
                    DeviceStateChangeEventArgs e = new DeviceStateChangeEventArgs();
                    e.DN          = PCBArray[a].DN;
                    e.type        = b;
                    e.processname = PCBArray[a].ProcessName;
                    e.needtime    = time;
                    e.Atime       = XDTime;
                    DeviceStateChange(null, e);
                }
            }
            //
            //修改进程状态
            //
            InsertOneToBlock(a);
            Execute = 10;
            //
            //转向进程调度
            //
            int c = JudgeAttemper();

            if (c < 10)
            {
                Attemper(c);
            }
        }
示例#2
0
 private async void CentralManager_DeviceStateChange(object source, DeviceStateChangeEventArgs args)
 {
     Debug.WriteLine(args.DeviceState.State);
 }
示例#3
0
 void StateChangedEvent(object sender, DeviceStateChangeEventArgs e)
 {
     _status = e.StatusInfo;
     waitHandle.Set();     // <- sets signal
 }