private RequestForServ GenNewRequest() { RequestForServ r = NewRequest; if (!StopGen) { KolReq++; NewRequest = new RequestForServ(KolReq); NewRequest.ArrivalTime = mainG.nextDouble() + r.ArrivalTime; EventList.AddEvent(NewRequest.ArrivalTime, NewRequest); } return(r); }
public void AddReq(RequestForServ NewApp) { Statistic.GeneralQueryValue[ID] += NewApp.ChannelNeeds[ID]; Statistic.QueryCount[ID]++; if (Channels < NewApp.ChannelNeeds[ID]) { Statistic.PullApps[ID]++; mainForm.Log.Add("Время: " + mainForm.TS.ToString() + "; Исключение: rоличество запрашиваемых каналов заявкой " + NewApp.ID + " превышает количество доступных"); } else { if (FreeChannels < NewApp.ChannelNeeds[ID])//отправляем в очередь устройства { Q.Push(NewApp); mainForm.Log.Add("Время: " + mainForm.TS.ToString() + "; Событие: Заявка: " + NewApp.ID + " встала в очередь устройства: " + ID.ToString()); } else// отправляем заявыку на обслуживание { if (!NewApp.WasInQueue) { Statistic.NotWaitApps[ID]++; } else { Statistic.HT[ID] += mainForm.TS - NewApp.WaitTime; Statistic.SW2[ID] += (mainForm.TS - NewApp.WaitTime) * (mainForm.TS - NewApp.WaitTime); } if (Busy) { Statistic.BusyTime[ID] += mainForm.TS - ChangeTime; } else { Busy = true; } ChangeTime = mainForm.TS; FreeChannels -= NewApp.ChannelNeeds[ID]; NewApp.ArrivalTime = mainForm.TS; Statistic.BusyChanCount[ID] += (Channels - FreeChannels) * (mainForm.TS - LastTimeBusyChanChanged); LastTimeBusyChanChanged = mainForm.TS; NewApp.EndTime = mainForm.TS + Dist.nextDouble(); //время конца обработки заявки EventList.AddEvent(NewApp.EndTime, ID, NewApp); //снова добавили в список событий Active_Apps.Add(NewApp); mainForm.Log.Add("Время: " + mainForm.TS.ToString() + "; Событие: Заявка: " + NewApp.ID + " встала на обслуживание на устройстве: " + ID.ToString()); } } }
private void btnStart_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(tbRequestNumber.Text)) { MaxReq = Convert.ToInt32(tbRequestNumber.Text); } if (!string.IsNullOrEmpty(tbWorkTime.Text)) { MaxTime = Convert.ToInt32(tbWorkTime.Text); } mainG = DistList[Convert.ToInt32(cmbGeneratorDistribution.Text) - 1]; NewRequest = new RequestForServ(KolReq); NewRequest.ArrivalTime = mainG.nextDouble(); EventList.AddEvent(NewRequest.ArrivalTime, NewRequest); bool stop = false; Event CurReq; while (!stop) { CurReq = EventList.GetClosest(); Console.WriteLine(CurReq.Request.ID); TS = CurReq.time; if (CurReq.IsNew) { Log.Add("Время: " + TS.ToString() + ". Поступила новая завка с номером: " + CurReq.Request.ID); KolObrRec++; DeviceList[0].AddReq(GenNewRequest());//получаем новую заявку и записываем ее в список if (KolObrRec == MaxReq) { StopGen = true; } } else { CurReq.Request.WasInQueue = false; Console.WriteLine(CurReq.Request.ID); Console.WriteLine(CurReq.TekDevice); DeviceList[CurReq.TekDevice - 1].LeaveApp(CurReq.Request);//уходим с устройства на котором были if (CurReq.TekDevice == DeviceList.Count) { if (chbClosedSystem.Checked) { DeviceList[0].AddReq(CurReq.Request); } else { Log.Add("Заявка " + CurReq.Request.ID + " вышла из системы"); } } else { DeviceList[CurReq.TekDevice].AddReq(CurReq.Request); } } stop = stop || (EventList.Events.Count <= 0) || (MaxTime > 0) && (MaxTime <= TS); } foreach (string s in Log) { lbLog.Items.Add(s); } ToStat(); }