Моделирование работы системы слежения за графиком движения автобусов одного маршрута, страница 4

                if(Form1->RadioGroup2->ItemIndex != -1)

                {

                        if(movpr)

                                Form1->RadioGroup2->ItemIndex++; //перемещаем автобус на следующую остановку

                        else

                                Form1->RadioGroup2->ItemIndex--; //автобус движется в обратном направлении

                }

                if(Form1->RadioGroup2->ItemIndex == 9)

                {

                  //приехали на конечную остановку

                  //считаем среднюю скорость для данного автобуса

                  //и расставляем метки со временем прибытия

                  double vsr = vsr2/9; //средняя скорость на маршруте

                  int timesr = ((rasst*9) / vsr)*10;

                  if(timesr > 60) timesr = 59;

                  vsr = 0;

                  TDateTime CurrentTime;

                  CurrentTime = StrToTime(Form1->RadioGroup2->Items->Strings[9]);

                  TDateTime Delay;

                  AnsiString buf = "00:";

                  buf += timesr;

                  buf += ":00";

                  Delay = StrToTime(buf);

                  Form1->RadioGroup2->Items->Strings[9] = TimeToStr(CurrentTime);

                  Form1->RadioGroup2->Items->Strings[8] = TimeToStr(CurrentTime+Delay);

                  Form1->RadioGroup2->Items->Strings[7] = TimeToStr(CurrentTime+Delay+Delay);

                  Form1->RadioGroup2->Items->Strings[6] = TimeToStr(CurrentTime+Delay+Delay+Delay);

                  Form1->RadioGroup2->Items->Strings[5] = TimeToStr(CurrentTime+Delay+Delay+Delay+Delay);

                  Form1->RadioGroup2->Items->Strings[4] = TimeToStr(CurrentTime+Delay+Delay+Delay+Delay+Delay);

                  Form1->RadioGroup2->Items->Strings[3] = TimeToStr(CurrentTime+Delay+Delay+Delay+Delay+Delay+Delay);

                  Form1->RadioGroup2->Items->Strings[2] = TimeToStr(CurrentTime+Delay+Delay+Delay+Delay+Delay+Delay+Delay);

                  Form1->RadioGroup2->Items->Strings[1] = TimeToStr(CurrentTime+Delay+Delay+Delay+Delay+Delay+Delay+Delay+Delay);

                  Form1->RadioGroup2->Items->Strings[0] = TimeToStr(CurrentTime+Delay+Delay+Delay+Delay+Delay+Delay+Delay+Delay+Delay);

                  movpr = false;

                }

                LeaveCriticalSection(&Sect1); //входим в критическую секцию

        }

  }

}

//---------------------------------------------------------------------------

DWORD WINAPI AvtobusThreadFunc3(LPVOID param)//поток 1-го автобуса

{

  randomize();

  Form1->RadioGroup3->Items->Strings[0] = TimeToStr(CurrentTime);

  //функция первого автобуса

  bool movpr = true; //признак - в какую сторону едем (туда или обратно)

  while(1)

  {

        if(!stop3)

        {

                int polomka = random(22); //определяем произошла ли поломка

                if(polomka == 1) //если поломка произошла, то определяем время на которое задержан автобус

                {

                       EnterCriticalSection(&Sect1); //входим в критическую секцию

                        //меняем картинку

                        Form1->Image3->Picture->LoadFromFile("instrument.jpeg");

                        Form1->Label6->Caption = 0; //скорость = 0 т.к. поломка

                        int polomkatime = random(200)+20;

                       LeaveCriticalSection(&Sect1);  //покидаем критическую секцию

                        Sleep(polomkatime*100); //задерживаем время на устранение поломки

                       EnterCriticalSection(&Sect1); //входим в критическую секцию

                        //поломка устранена - меняем картинку

                        Form1->Image3->Picture->LoadFromFile("avtobus.jpg");

                       LeaveCriticalSection(&Sect1);  //покидаем критическую секцию

                }

                //вычисляем значение скорости автобуса на перегоне (сл число)

                v3 = random(31)+30;  //по заданию скорость постоянная (выбрана в интерале от 30 до 60 км/ч)

                //задержка на перемещение автобуса (расстояние между остановками / скорость)

                int wait = 2/v3;

                vsr3 += v3; //добавляем к средней скорости на маршруте

                EnterCriticalSection(&Sect1); //входим в критическую секцию

                Form1->Label6->Caption = v3; //отображаем скорость на форме

                LeaveCriticalSection(&Sect1); //входим в критическую секцию

                Sleep(wait*10000);

                Sleep(1000);//дополнительная задержка для реалистичности (время на посадку-высадку пассажиров и т.д.)

                EnterCriticalSection(&Sect1); //входим в критическую секцию

                if(Form1->RadioGroup3->ItemIndex == 0)

                {

                   //находимся на начальной остановке

                  //считаем среднюю скорость для данного автобуса

                  //и расставляем метки со временем прибытия

                  double vsr = vsr3/9; //средняя скорость на маршруте

                  if(vsr3 = 0) vsr = random(31)+30;

                  int timesr = ((rasst*9) / vsr)*10;

                  if(timesr > 60) timesr = 59;

                  TDateTime Delay;

                  AnsiString buf = "00:";

                  buf += timesr;