Написание программы визуального отображения состояния кабины каждого лифта в девятиэтажном жилом доме, страница 5

                if(Panel3->Top >= nullet-delta)      //лифт на 2 этаже

                        stage3 = 2;

                if(Panel3->Top >= nullet)      //лифт на 1 этаже

                        stage3 = 1;

         }

   }

   LeaveCriticalSection(&sect);

}

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

void __fastcall TForm1::Timer4Timer(TObject *Sender)

{

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

    if(stage4 == Edit4->Text.ToInt())

  { //приехали

    Timer4->Enabled = false; //останавливаем лифт

    //открываем двери

    open4 = true;

    tick4 = 0;

    Timer8->Enabled = true;

  }

  else

  if(Timer8->Enabled == false) //проверяем закрыты ли двери

  {

          //перемещение лифта

          if(napr4 == 1)

          {

                Panel4->Top -= 5; //едем вверх

                if(Panel4->Top >= nullet-delta*9)      //лифт на 9 этаже

                        stage4 = 9;

                if(Panel4->Top >= nullet-delta*8)       //лифт на 8 этаже

                        stage4 = 8;

                if(Panel4->Top >= nullet-delta*7)       //лифт на 7 этаже

                        stage4 = 7;

                if(Panel4->Top >= nullet-delta*6)      //лифт на 6 этаже

                        stage4 = 6;

                if(Panel4->Top >= nullet-delta*5)      //лифт на 5 этаже

                        stage4 = 5;

                if(Panel4->Top >= nullet-delta*4)      //лифт на 4 этаже

                        stage4 = 4;

                if(Panel4->Top >= nullet-delta*3)      //лифт на 3 этаже

                        stage4 = 3;

                if(Panel4->Top >= nullet-delta*2)      //лифт на 2 этаже

                        stage4 = 2;

                if(Panel4->Top >= nullet-delta)      //лифт на 1 этаже

                        stage4 = 1;

          }

          if(napr4 == -1)

          {

                Panel4->Top += 5; //едем вниз

                if(Panel4->Top >= nullet-delta*8)      //лифт на 9 этаже

                        stage4 = 9;

                if(Panel4->Top >= nullet-delta*7)       //лифт на 8 этаже

                        stage4 = 8;

                if(Panel4->Top >= nullet-delta*6)       //лифт на 7 этаже

                        stage4 = 7;

                if(Panel4->Top >= nullet-delta*5)      //лифт на 6 этаже

                        stage4 = 6;

                if(Panel4->Top >= nullet-delta*4)      //лифт на 5 этаже

                        stage4 = 5;

                if(Panel4->Top >= nullet-delta*3)      //лифт на 4 этаже

                        stage4 = 4;

                if(Panel4->Top >= nullet-delta*2)      //лифт на 3 этаже

                        stage4 = 3;

                if(Panel4->Top >= nullet-delta)      //лифт на 2 этаже

                        stage4 = 2;

                if(Panel4->Top >= nullet)      //лифт на 1 этаже

                        stage4 = 1;

         }

   }

    LeaveCriticalSection(&sect);

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

  EnterCriticalSection(&sect);

    //определяем куда лифту ехать - вниз или вверх

     if(stage2 == Edit2->Text.ToInt())  napr2 = 0;

     if(stage2 < Edit2->Text.ToInt())  napr2 = 1;

     if(stage2 > Edit2->Text.ToInt())  napr2 = -1;

     Timer6->Enabled = true;

     Timer2->Enabled = true;

  LeaveCriticalSection(&sect);

}

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

void __fastcall TForm1::Button4Click(TObject *Sender)

{

    EnterCriticalSection(&sect);

     //определяем куда лифту ехать - вниз или вверх

     if(stage3 == Edit3->Text.ToInt())  napr3 = 0;

     if(stage3 < Edit3->Text.ToInt())  napr3 = 1;

     if(stage3 > Edit3->Text.ToInt())  napr3 = -1;

     Timer7->Enabled = true;

     Timer3->Enabled = true;

    LeaveCriticalSection(&sect);

}

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

void __fastcall TForm1::Button5Click(TObject *Sender)

{

     EnterCriticalSection(&sect);

   //определяем куда лифту ехать - вниз или вверх

     if(stage4 == Edit4->Text.ToInt())  napr4 = 0;

     if(stage4 < Edit4->Text.ToInt())  napr4 = 1;

     if(stage4 > Edit4->Text.ToInt())  napr4 = -1;

     Timer8->Enabled = true;

     Timer4->Enabled = true;

     LeaveCriticalSection(&sect);

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

   InitializeCriticalSection(&sect); //инициализируем критическую секцию

   hThread1 = CreateThread(0,0,ThreadFunc1,0,0,NULL);  //создаем вторичный поток

}

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

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

   if(hThread1 != NULL)

      TerminateThread(hThread1,0);  //Завершаем вторичный поток

}

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

Список литературы:

1.  Программирование в C++ Builder. А.Я. Архангельский, Бином, Москва, 2003.- 1151 с.

2.  Конспект лекций по курсу Операционные системы лектор Родников В.В. 2010г.