예제 #1
0
        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);
        }
예제 #2
0
        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());
                }
            }
        }
예제 #3
0
        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();
        }