/*Запуск модели*/ private void Go_B_Click(object sender, EventArgs e) { Load_GB.Hide(); ReadyLoad_LB.ClearSelected(); Log.Clear(); //TBootFile bf = new TBootFile(); //bf.nameOfFile = "процесс2"; //bf.comandsOfFile.Add("ПАМЯТЬ-1000"); //bf.comandsOfFile.Add("ПРОЦЕССОР-3"); //bf.comandsOfFile.Add("ПРОЦЕССОР-2"); //bf.comandsOfFile.Add("КОНЕЦ"); //TProcess prss = CreateProcess(bf); //queueOfReady.Add(prss); //TimerOfProcessor.Start(); if (QueueOfReady_LB.Items.Count > 0) { ///Processor_TC.TabPages.Clear();//Очистка вкладок /*Заполнение главного списка процессов из списка ГОТОВНОСТЬ*/ for (int i = 0; i < QueueOfReady_LB.Items.Count; i++) { TBootFile bootFile = QueueOfReady_LB.Items[i] as TBootFile; TProcess process = CreateProcess(bootFile); queueOfReady.Add(process); /* Для рендера ЛОГА при создании процесса*/ ToLog("Создан процесс "); ToLog(process.ToString(), Color.Lime); ToLog(" и добавлен в очерель ГОТОВНОСТЬ.", Color.White); ToLog("Занято "); ToLog(process.descriptor.memory.ToString() + " байт", Color.Lime); ToLog(" процессом ", Color.White); ToLog(process.descriptor.name, Color.Lime); } /*Отрисовка вкладок ПРОЦЕССОР*/ /*int j = 0; * foreach (TProcess str in queueOfReady) * { * DrawPageProc(queueOfReady[j++]); * }*/ ToLog("Очередь ГОТОВНОСТЬ сформирована."); ToLog("Планировщик процессов - запущен."); TimerOfProcessor.Start(); Go_B.Enabled = false; } else { ToLog("Добавте сперва процесс в очередь ГОТОВНОСТЬ", Color.Red); } }
/*Кнопка добавление файла в ГОТОВНОСТЬ*/ private void AddToQueueOfReady_B_Click(object sender, EventArgs e) { if (TimerOfProcessor.Enabled == false) { Log.Clear(); Go_B.Enabled = true; TBootFile selectFile = ReadyLoad_LB.SelectedItem as TBootFile; //добавление процесса, выбранного в списке доступных, в очередь ГОТОВНОСТЬ QueueOfReady_LB.Items.Add(selectFile); } else { TBootFile selectFile = ReadyLoad_LB.SelectedItem as TBootFile; QueueOfReady_LB.Items.Add(selectFile); } }
/* Создание процесса */ TProcess CreateProcess(TBootFile bootFile) { TProcess process = new TProcess(); /*Список команд загрузочного файла - кодовый сегмент*/ process.strFileCommands = bootFile.comandsOfFile; /*Заполнение дескриптора процесса*/ process.descriptor.name = bootFile.nameOfFile; process.descriptor.PIDcount(); process.descriptor.kvant = 1; process.descriptor.state = TStateProcess.spREADY; process.descriptor.memory = process.GetCountRun(0); /*Настроить содержимое контекста нового процесса (инициализация начальными параметрами)*/ process.context.currentLine = 0; process.context.command = TCommand.cMEMORY; process.context.currentRun = 0; process.context.countRun = process.GetCountRun(0); return(process); }
/*События, при выборе файла в списке доступных файлов*/ private void ReadyLoad_LB_SelectedIndexChanged(object sender, EventArgs e) { FileShow_LB.Items.Clear(); QueueOfReady_LB.ClearSelected(); if (ReadyLoad_LB.SelectedIndex != -1) { Load_GB.Show(); TBootFile bootFile = ReadyLoad_LB.SelectedItem as TBootFile; foreach (string comandfile in bootFile.comandsOfFile) { FileShow_LB.Items.Add(comandfile); } if (TimerOfProcessor.Enabled == false) { ToLog("Нажмите Добавить, чтобы отправить выбранный файл в очередь ГОТОВНОСТЬ.\r\n", Color.DeepSkyBlue); ToLog(" -- клик ПКМ по области описание файла, скрывает его.", Color.DeepSkyBlue); Log.Clear(); } } }
/*Меню загрузки файла*/ private void Button_TS_Click(object sender, EventArgs e) { Load_GB.Hide(); ReadyLoad_LB.ClearSelected(); Open_D.Multiselect = true; Open_D.Filter = "Text files(*.txt)|*.txt|All files(*.*)|*.*"; Open_D.FileName = ""; // Имя файла "по умолчанию" не задано Open_D.Title = "Загрузка файла, моделирующего процесс"; /* * * Вызов диалогового окна выбора файла для загрузки и проверка результата завершения его работы. * Если окно закрыто с подтверждением загрузки (нажата кнопка OK), * то выполнение действий по чтению файла построчно * */ if (Open_D.ShowDialog() == DialogResult.OK) { foreach (string file in Open_D.FileNames) { using (StreamReader sr = new StreamReader(file, Encoding.Default)) { TBootFile bootFile = new TBootFile(); bootFile.nameOfFile = Path.GetFileNameWithoutExtension(file); while (!sr.EndOfStream) { string line = sr.ReadLine().Trim(); bootFile.comandsOfFile.Add(line); } ReadyLoad_LB.Items.Add(bootFile); } } if (!TimerOfProcessor.Enabled) { Log.Clear(); ToLog("Выберите любой файл и добавте его в список ГОТОВНОСТЬ", Color.DeepSkyBlue); } } }