if(Panel3->Top >= nullet-delta) //лифт на 2 этаже
stage3 = 2;
if(Panel3->Top >= nullet) //лифт на 1 этаже
stage3 = 1;
}
}
LeaveCriticalSection(§);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer4Timer(TObject *Sender)
{
EnterCriticalSection(§); //входим в критическую секцию
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(§);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
EnterCriticalSection(§);
//определяем куда лифту ехать - вниз или вверх
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(§);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
EnterCriticalSection(§);
//определяем куда лифту ехать - вниз или вверх
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(§);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
EnterCriticalSection(§);
//определяем куда лифту ехать - вниз или вверх
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(§);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
InitializeCriticalSection(§); //инициализируем критическую секцию
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г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.