// //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); } }
private async void CentralManager_DeviceStateChange(object source, DeviceStateChangeEventArgs args) { Debug.WriteLine(args.DeviceState.State); }
void StateChangedEvent(object sender, DeviceStateChangeEventArgs e) { _status = e.StatusInfo; waitHandle.Set(); // <- sets signal }