private void AutoGenerateTimer_Tick(object sender, EventArgs e) //тик таймера автогенерации { int sttmp = rnd.Next((int)((GenerateStageRangeMax.Value - GenerateStageRangeMin.Value) + GenerateStageRangeMin.Value)); // получаем диапазон количества стейджей и задаем их рандомное значение if (sttmp % 2 == 0) { sttmp = sttmp + 1; } //делаем количество стейджей нечетным ProcessObject temp = new ProcessObject(sttmp); //создаем темп объект процесса с указаным выше количеством стейджей for (int i = 0; i < temp.StageCount; i++) //рандомно заполняем их. (для четного и нечетного правила разные) { if (i % 2 == 0) { temp.StageQuue[i] = rnd.Next((int)((GenerateStageTimeRangeMax.Value - GenerateStageTimeRangeMin.Value) + GenerateStageTimeRangeMin.Value) * 1000); } else { temp.StageQuue[i] = rnd.Next((int)((GenerateStageTimeRangeMax.Value - GenerateStageTimeRangeMin.Value) + GenerateStageTimeRangeMin.Value)); } } temp.ProcessID = ID; //записываем ид temp.ProcessName = "test" + ID.ToString(); //записываем имя ID++; //инкримируем ид temp.ProcessPriority = rnd.Next(1000); //задаем приоритет QueueProcess.Add(temp); //добавляем в очередь готовых WriteToLog(temp, "Сгенерирована задача"); //записываем в лог if (ExecutedProcessName.Text == "") //проверяем наличие выполняемого процесса { ToExecutedTask(); ExecutedTimer.Start(); // старт таймера выполнения процесса } RefreshReadyQuueViewFunc(); //перерисовка очереди готовых задач }
private void ExecutedTimer_Tick(object sender, EventArgs e) //тик таймера выполнения { if (StartExTimerFromWaitingQu == false) //проверка на запуск таймера из очереди ожидания { if (SavedExucutedProcess.StageNow != SavedExucutedProcess.StageCount) //проверка на полное выполнение процесса { WaitingProcess.Add(SavedExucutedProcess); //отравление в очередь ожидания if (WaitingProcess.Count == 1 && WaitingQuueTimer.Enabled == false) { WaitingQuueTimer.Start(); } //проверка на необходимость запуска таймера очереди ожидания RefreshWaitingQuueViewFunc(); //перерисовка очереди ожидания WriteToLog(SavedExucutedProcess, "Выполнена часть задачи"); //запись в лог } else { WriteToLog(SavedExucutedProcess, "Задача выполнена"); ExecutedProcess.Add(SavedExucutedProcess); } //полное выполнение процесса if (QueueProcess.Count != 0) //проверка очереди готовых { ToExecutedTask(); //передаем процесс на выполнение } else { ExecutedTimer.Stop(); ExecutedProcessId.Text = ""; ExecutedProcessName.Text = ""; ExecutedProcessTime.Text = ""; } //нечего не выполняется } else { ToExecutedTask(); //передаем процесс на выполнение StartExTimerFromWaitingQu = false; // } }
private void WaitingQuueTimer_Tick(object sender, EventArgs e) // таймер очереди ожидания { if (WaitingProcess.Count != 0) //процерка на наличие процессов в очереди ожидания { bool refr = false; //переменная указывающая на необходимость перирисовки for (int i = 0; i < WaitingProcess.Count; i++) { if (WaitingProcess[i].WaitingTime++ >= WaitingProcess[i].StageQuue[WaitingProcess[i].StageNow]) //проверка на время нахождения в очереди готовых { WaitingProcess[i].StageNow++; //меняем стейдж WaitingProcess[i].WaitingTime = 0; //обнуляем время ожидания QueueProcess.Add(WaitingProcess[i]); //отравление в очередь готовых WriteToLog(WaitingProcess[i], "Отправлен в очередь готовых из ожидания"); //запись в лог WaitingProcess.Remove(WaitingProcess[i]); //удаление из очереди ожидания if ((QueueProcess.Count == 1) && (ExecutedTimer.Enabled == false)) { StartExTimerFromWaitingQu = true; ExecutedTimer.Interval = 1; ExecutedTimer.Start(); } // проверка на наличие процессов в очереди готовности и запущен ли таймер выполнения refr = true; //включаем флаг на перерисовку } else { WaitingProcess[i].WaitingTime++;//инкримируем время ожидания процесса } } if (refr == true) //проверка на необходимость перерисовки { RefreshWaitingQuueViewFunc(); //перерисовка очереди ожидания RefreshReadyQuueViewFunc(); //перерисовка очереди исполнения } } else { WaitingQuueTimer.Stop(); } //остановка таймера ожидание, если очередь пуста }