Разработка программы управления работой лифтов в четырехподъездном девятиэтажном доме

Страницы работы

Содержание работы

Министерство образования и науки РФ

Новосибирский Государственный Технический Университет

Кафедра ССОД

Расчетно-графическая работа

по дисциплине «Операционные системы»

Вариант №18

Факультет: АВТ                                                                                                      Преподаватель

Группа: АТ - 93                                                                                                       Родников В.В.

Студент: Кириллова М.А.

                                                                       Отметка о защите:

            ________________

Дата защиты: «____»___________2011г.

Новосибирск

2011

Содержание:

1.  Задание       _        _        _        _        _        _        _        _          _        _        _2

2.  Введение    _        _        _        _        _        _        _        _          _        _        _2

3.  Общая схема работы программы     _        _        _        _          _        _        _3

4.  Краткое описание переменных        _        _        _        _          _        _        _3

5.  Описание основных функций           _        _        _        _          _        _        _4

6.  Вид окна приложения             _        _        _        _        _          _        _        _6

7.  Листинг Unit1.h             _        _        _        _        _        _          _        _        _6

8.  Листинг Unit1.cpp         _        _        _        _        _        _          _        _        _8

9.  Заключение          _        _        _        _        _        _        _          _        _        _14

10. Список литературы       _        _        _        _        _        _          _        _        _14

Задание:

В девятиэтажном жилом доме четыре подъезда, в каждом работает лифт. После пуска кабина лифта перемещается с этажа на этаж за 4 секунды. Написать программу визуального отображения состояния кабины каждого лифта (стоит или движется), если управление каждым лифтом производится оператором в отдельном дочернем процессе. В окне дочернего процесса необходимо предусмотреть числовые поля как для номера этажа, на котором остановилась кабина, так и для номера этажа, куда она должна переместиться после нажатия кнопки «ПУСК». Способ кодирования и передачи данных родительскому процессу, а также способ синхронизации выбрать самостоятельно.

Введение:

Процесс будет разделён на два потока, осуществляющие работу с разделяемым ресурсом. Критическая секция – часть программы, в которой осуществляется доступ к разделяемым данным. Используя для синхронизации работы критическую секцию, обеспечим в каждый момент в критической секции, связанной с этим ресурсом, нахождение максимум одного процесса (приём взаимного исключения).

Пользователь выбирает нужные подъезд и лифт, далее для каждого лифта всё идет по одинаковым сценариям:

 - пользователь устанавливает номер этажа, куда должна переместиться кабина;

 - числовое значение пункта назначения (1-9) присваивается переменной dest_st (destination_station)

 - Щелчок по кнопке «Поехали! ». Начинает работу таймер.

 - Главный поток считывает значение dest_st

 - Главный поток сравнивает значения переменных dest_st и floor

- - если dest_st > floor, то floor + +

 - - если dest_st < floor, то floor - -

 - главный поток освобождает ресурс

 - вторичный поток считывает floor

 - вторичный поток выводит текущее значение floor на форму

 - вторичный поток освобождает ресурс

 - - если dest_st ! = floor, то снова начинают сравниваться значения переменных, либо, если пользователь ввёл новые данные, начинается их обработка.


Общая схема работы программы:

 


Краткое описание переменных:

int floor1;       //Переменные, хранящие "положение" кабины (этаж)

int floor2;

 int floor3;

int floor4;

int dest_st1;    // Пункт назначения (номер этажа)

int dest_st2;

int dest_st3;

int dest_st4;


Описание основных функций:

1)  Функция вторичного потока. Представляет собой бесконечный цикл. За счёт использования критической секции вторичный поток получает доступ к разделяемому ресурсу только после того, как главный поток завершил операции, связанные с этим ресурсом.

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

DWORD WINAPI ThreadFunc1(void *p)         //функция вторичного потока

{

   while(1)

{

      EnterCriticalSection(&sect);

     Form1->Label1->Caption = floor1;         //отображаем текущее положение лифтов

     Form1->Label2->Caption = floor2;

     Form1->Label3->Caption = floor3;

     Form1->Label4->Caption = floor4;

      LeaveCriticalSection(&sect);

}

}

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

2)  Кнопка «Поехали!» для первого лифта (аналогично для всех лифтов).

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Timer5->Enabled=true;                                // включаем таймер

Form1->Panel11->Color = clBtnFace;         // закрываем двери

}

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

3)  Функция таймера для первого лифта (аналогично для всех лифтов).

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

void __fastcall TForm1::Timer5Timer(TObject *Sender)

{

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

{

if (floor1= =Edit1->Text.ToInt())                 // если приехали

{

Form1->Panel11->Color=clYellow; // открываем двери

}

if (floor1<Edit1->Text.ToInt())                    //если находимся ниже, чем нужно

{

Form1->Panel11->Color = clBtnFace; // закрываем двери (это на случай,

   //если пользователь меняет пункт назначения

   //«по пути»

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

if(Panel11->Top >= perv-prolet*9)      //лифт на 9 этаже

floor1 = 9;

if(Panel11->Top >= perv-prolet*8)       //лифт на 8 этаже

Похожие материалы

Информация о работе