public void LeaveApp(RequestForServ DelApp) { //Сбор статистики Statistic.BT_Common += mainForm.TS - DelApp.ArrivalTime; Statistic.BT[ID] += mainForm.TS - DelApp.ArrivalTime; //количество выполненных заявок Statistic.TC[ID]++; //Суммарное время обслуживания if (ID == mainForm.DeviceList.Count) { Statistic.TC_Common++; } Active_Apps.Remove(DelApp); FreeChannels += DelApp.ChannelNeeds[ID]; if (Active_Apps.Count == 0) { Busy = false; ChangeTime = mainForm.TS; } mainForm.Log.Add("Время: " + DelApp.EndTime + "; Событие: Заявка: " + DelApp.ID.ToString() + " закончила обслуживание на устройстве: " + ID.ToString()); RequestForServ appl = Q.Pop(FreeChannels, ID);//получение заявки из очереди if (appl != null) { mainForm.Log.Add("Время: " + mainForm.TS.ToString() + "; Событие: Заявка: " + appl.ID.ToString() + " вышла из очереди устройства: " + ID.ToString()); AddReq(appl); } }
public static void AddEvent(double time, RequestForServ rec) { Event e = new Event(); e.IsNew = true; e.time = time; e.Request = rec; Events.Add(e); Events.Sort(Compare); }
public static void AddEvent(double time, int PhNum, RequestForServ Appl) { Event e = new Event(); e.IsNew = false; e.time = time; e.TekDevice = PhNum; e.Request = Appl; Events.Add(e); Events.Sort(Compare); }
public static void AddEvent(double time, RequestForServ rec) { Event e = new Event(); e.IsNew = true; e.time = time; e.Request = rec; Events.Add(e); Events.Sort(Compare); }
public static void AddEvent(double time, int PhNum, RequestForServ Appl) { Event e = new Event(); e.IsNew = false; e.time = time; e.TekDevice = PhNum; e.Request = Appl; Events.Add(e); Events.Sort(Compare); }
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()); } } }
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()); } } }
public void Push(RequestForServ NewApp) { if (Size == -1 || ReqInQ < Size) { Statistic.STL[ID] += (mainForm.TS - LastChangeTime) * ReqInQ; LastChangeTime = mainForm.TS; NewApp.WasInQueue = true; NewApp.WaitTime = mainForm.TS; Statistic.CountQueueApps[ID]++; ReqInQ++; if (MaxLengh > ReqInQ) { MaxLengh = ReqInQ; } Queue.Add(NewApp); } else { Statistic.PullApps[ID]++; mainForm.Log.Add("Время: " + mainForm.TS.ToString() + "; Исключение: очередь переполнена, заявка " + NewApp.ID + " вытолкнута с обслуживания"); } }
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(); }
public RequestForServ Pop(int ChannelNeeds, int Dev) { bool run = true; RequestForServ res = null; if (ReqInQ > 0) { int n; switch (Type) { case "FIFO": n = -1; run = true; while (run && n < ReqInQ) { n++; if (n < ReqInQ) { run = (Queue[n].ChannelNeeds[Dev] > ChannelNeeds); } } if (n == ReqInQ) { res = null; } else { res = Queue[n]; Queue.RemoveAt(n); } break; case "LIFO": n = Queue.Count; while (run && n >= 0) { n--; if (n >= 0) { run = Queue[n].ChannelNeeds[ID] > ChannelNeeds; } } if (n == -1) { res = null; } else { res = Queue[n]; Queue.RemoveAt(n); } break; case "PRIORITET": n = 0; int maxpr = Queue[0].Priority; for (int i = 1; i < Queue.Count; i++) { if (Queue[i].Priority > maxpr) { maxpr = Queue[i].Priority; n = i; } } res = Queue[n]; Queue.RemoveAt(n); break; } Statistic.STL[ID] += (mainForm.TS - LastChangeTime) * ReqInQ; LastChangeTime = mainForm.TS; Statistic.QueuePassedApps[ID]++; ReqInQ--; } return(res); }
public void LeaveApp(RequestForServ DelApp) { //Сбор статистики Statistic.BT_Common += mainForm.TS - DelApp.ArrivalTime; Statistic.BT[ID] += mainForm.TS - DelApp.ArrivalTime;//количество выполненных заявок Statistic.TC[ID]++;//Суммарное время обслуживания if (ID == mainForm.DeviceList.Count) { Statistic.TC_Common++; } Active_Apps.Remove(DelApp); FreeChannels += DelApp.ChannelNeeds[ID]; if (Active_Apps.Count == 0) { Busy = false; ChangeTime = mainForm.TS; } mainForm.Log.Add("Время: " + DelApp.EndTime + "; Событие: Заявка: " + DelApp.ID.ToString() + " закончила обслуживание на устройстве: " + ID.ToString()); RequestForServ appl = Q.Pop(FreeChannels, ID);//получение заявки из очереди if (appl != null) { mainForm.Log.Add("Время: " + mainForm.TS.ToString() + "; Событие: Заявка: " + appl.ID.ToString() + " вышла из очереди устройства: " + ID.ToString()); AddReq(appl); } }
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; }
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(); }
public void Push(RequestForServ NewApp) { if (Size == -1 || ReqInQ < Size) { Statistic.STL[ID] += (mainForm.TS - LastChangeTime) * ReqInQ; LastChangeTime = mainForm.TS; NewApp.WasInQueue = true; NewApp.WaitTime = mainForm.TS; Statistic.CountQueueApps[ID]++; ReqInQ++; if (MaxLengh > ReqInQ) MaxLengh = ReqInQ; Queue.Add(NewApp); } else { Statistic.PullApps[ID]++; mainForm.Log.Add("Время: " + mainForm.TS.ToString() + "; Исключение: очередь переполнена, заявка " + NewApp.ID + " вытолкнута с обслуживания"); } }