Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[ООП] / Лекции / Zao_2009_Paral_1.doc
Скачиваний:
36
Добавлен:
07.02.2016
Размер:
58.88 Кб
Скачать

5

Лабораторная работа № 1

Введение в Borland C++ Builder. Многопоточные приложения

Цель: изучить среду разработки Borland C++ Builder, научиться создавать Windows- и консольные приложения.

1. Теоретические сведения

1.1. Borland C++ Builder. Фирма Borland (Inprise), специализирующаяся на разработке инструментальных средств, создала мощное средство визуальной разработки Windows приложений – Borland C++ Builder. Ключ к пониманию приложения, разработанного в среде Borland C++ Builder лежит в понимании работы компонент из библиотеки классов визуальных компонент (VCL).

Каждый визуальный компонент представляет собой класс C++, который имеет так называемые свойства (properties), задающие параметры данного компонента, например цвет или заголовок. Каждое Windows-приложение состоит, по крайней мере, из одного компонента ‑ формы, т.е. окна приложения. Каждой форме соответствует заголовочный файл с расширением*.hс описанием производного от базового классаTFormкласса данной формы (по умолчаниюTForm1), файл с расширением*.cpp c определениями функций-членов классаTForm1и файл формы с расширением*.dfm. Кроме того, проект включает файлы ресурсов (*.res) и одноименные *.makи*.cppфайлы главного модуля (Project Source). Когда Windows посылает сообщения элементу управления, то происходит вызов метода класса формы, содержащей этот управляющий элемент. Поэтому обработка сообщений сводится к перекрытию соответствующих методов класса формы или установке специальных свойств экземпляра управляющего класса на функцию обработки события. Это облегчается еще и тем, что Borland C++ Builder автоматически настраивает эти свойства, одновременно создавая шаблоны соответствующих методов обработки в классе формы по желанию программиста посредством интуитивно понятного интерфейсаObject Inspector.

1.2. Среда разработки Borland C++ Builder.Когда Borland C++ Builder загружается, на экране отображаются четыре окна:

  1. главное окно с заголовком C++ Builder-Project1, содержащее меню, панель горячих кнопок и палитру компонентов;

  2. окно инспектора объектов, который позволяет просматривать свойства визуальных компонентов, помещенных на форму, а так же их обработчики событий;

  3. окно формы, помеченное Form1;

  4. окно модуля с названием Unit.cpp, которое первоначально перекрыто окном формы.

1.3. Класс TThread.В библиотеку Borland C++ Builder входит классTThread, который предназначен для создания и управления потоками команд (нитями) внутри основного процесса. Этот класс также имеет методы, позволяющие синхронизировать Windows GUI в тех случаях, когда необходимо организовать обращение к функциям графического интерфейса из дочернего потока команд. Основная концепция Borland C++ Builder в отношении организации параллельных процессов (потоков), заключается в рассмотрении потока команд как экземпляра класса. Поэтому далее мы рассматриваем потоки в смысле экземпляров классов, производных (наследуемых) от базового классаTThread.

TThreadявляется базовым классом по отношению к потокам, создаваемым пользователем. Программист должен сам создать класс, производный отTThread, и перекрыть (модифицировать) методExecute()для того, чтобы определить, какой именно код будет выполняться в дочернем потоке. Иногда бывает полезно перекрыть и конструктор производного класса для передачи потоку необходимого списка параметров.

Поток команд, составляющих тело функции-члена Execute(), запускается сразу после создания экземпляра классаTThread, если этот экземпляр создан конструктором с параметромfalse. Если параметр конструктора ‑true, то поток не запускается и находится в приостановленном состоянии (suspended), пока не будет вызван метод классаTThread::Resume(). Кроме того, имеется методSuspend(), который может приостановить выполняющийся поток команд до тех пор, пока не будет вызван методResume()того же потока.

Для синхронизации дочерних потоков с основным применяется метод WaitFor(). Функция-член экземпляра класса (дочернего потока)WaitFor() не возвращает никакого значения до тех пор, пока не завершится выполнение всех команд данного потока.

Соседние файлы в папке Лекции