void MoveToIO() { IO_TC.TabPages.Clear(); Processor_TC.TabPages.Clear(); DrawPageIO(inOut.ioRun); // отрисовка вкладки IO_TC.Refresh(); //<--- Processor_TC.Refresh(); //<---- TabPage tabPage = IO_TC.Controls["TabPageIO" + inOut.ioRun.descriptor.PID] as TabPage; StateIO_L.Text = "Состояние: " + inOut.stateIO.GetDescription(); /* Рендер ПРОЦЕССА*/ Label label = tabPage.Controls["StateIO_L" + inOut.ioRun.descriptor.PID] as Label; ListBox listBox = tabPage.Controls["IO_LB" + inOut.ioRun.descriptor.PID] as ListBox; label.Text = "Состояние: " + inOut.ioRun.descriptor.state.GetDescription(); //listBox.SetSelected(inOut.ioRun.context.currentLine, true); }
/*Диспетчер процессов FIFO*/ void ManagerOfProc() { if (processor.stateProcessor == TStateProcessor.sprBUSY) { /*Если пришел с ВЫПОЛНЕНИЕ, то отправляется в ГОТОВНОСТЬ по условию FIFO*/ if (processor.run.descriptor.state == TStateProcess.spREADY)// ожидаемое событие - окончание работы команды процесса { List <TProcess> temp = new List <TProcess>(); temp.Add(processor.run); temp.AddRange(queueOfReady); queueOfReady.Clear(); queueOfReady = temp; RefreshReady(); // текущее состояние ГОТОВНОСТЬ Processor_TC.TabPages.Clear(); //визуализация удаления процесса - ПРОЦЕССОР Processor_TC.Refresh(); processor.stateProcessor = TStateProcessor.sprEMPTY; // процессор пуст, так в нем нет процесса GoingP_L.Text = "Выполнено: - " + " из -"; processor.run = null; } } else/* процесс С ГОТОВНОСТЬ на ВЫПОЛНЕНИЕ - когда процессор свободен */ { if (queueOfReady.Count > 0) { processor.run = queueOfReady[0]; // инициализируем текущий queueOfReady.RemoveAt(0); // процесс RefreshReady(); // перерисовка ГОТОВНОСТЬ processor.stateProcessor = TStateProcessor.sprBUSY; // переключене процессора в рабочий режим processor.run.descriptor.state = TStateProcess.spRUN; // запуск процесса MoveToRun(); //рендер отправки процесса на ВЫПОЛНЕНИЕ } else { if (!TimerOfIO.Enabled) { TimerOfProcessor.Stop(); ToLog(""); ToLog("Все процессы отработали", Color.Red); Processor_TC.TabPages.Clear(); Go_B.Enabled = true; } } } }
void MoveToRun() { Processor_TC.TabPages.Clear(); DrawPageProc(processor.run); // отрисовка вкладки Processor_TC.Refresh(); TabPage tabPage = Processor_TC.Controls["TabPage" + processor.run.descriptor.PID] as TabPage; /* Рендер ЛОГА */ ToLog(""); ToLog(processor.run.ToString(), Color.Lime); ToLog(" добавлен в ВЫПОЛНЕНИЕ (квант=", Color.White); ToLog(processor.run.descriptor.kvant.ToString(), Color.Lime); ToLog(")", Color.White); StateP_L.Text = "Состояние: " + processor.stateProcessor.GetDescription(); /* Рендер ПРОЦЕССА*/ Label label = tabPage.Controls["State_L" + processor.run.descriptor.PID] as Label; ListBox listBox = tabPage.Controls["Process_LB" + processor.run.descriptor.PID] as ListBox; label.Text = "Состояние: " + processor.run.descriptor.state.GetDescription(); listBox.SetSelected(processor.run.context.currentLine, true); //Processor_TC.Refresh(); //groupBox4.Refresh(); }