Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laba 2.doc
Скачиваний:
3
Добавлен:
24.11.2019
Размер:
199.68 Кб
Скачать

Лабораторная работа №2. Использование потоков в среде Delphi

Цель работы: изучить работу с классом TThread в среде программирования Delphi и научиться разрабатывать многопоточные приложения.

Методические указания к лабораторной работе:

Потоки — это объекты, получающие время процессора. Время обычно выделяется квантами. Квант времени — это интервал, имеющийся в распоряжении потока до тех пор, пока время не будет у него отобрано и передано в распоряжение другого потока.

Нужно иметь в виду, что кванты выделяются не программам или процессам, а порожденным ими потокам. Как минимум, каждый процесс имеет хотя бы один поток, но Windows 95 и Windows NT позволяют запустить в рамках процесса сколько угодно потоков.

Потоки дают современному программному обеспечению новые специфические возможности. К примеру, Excel и Word задействуют по несколько потоков. Word может одновременно корректировать грамматику и печатать, при этом осуществляя ввод данных с клавиатуры и мыши; программа Excel способна производить фоновые вычисления и печатать. Потоки упрощают жизнь тем программистам, которые разрабатывают приложения в архитектуре клиент/сервер. В момент, когда требуется обслуживание нового клиента, сервер может запустить специально для этого отдельный поток.

Существует два главных типа потоков — асимметричные и симметричные. Чаще всего на персональных компьютерах используют асимметричные потоки.

Асимметричные потоки (Asymmetric threads) — это потоки, решающие различные задачи и, как правило, не разделяющие ресурсы. Один из таких потоков отвечает за печать; другой обрабатывает сообщения от клавиатуры и мыши; третий заведует автоматическим сохранением документа пользователя.

Симметричные потоки (Symmetric threads) выполняют одну и ту же работу, разделяют одни ресурсы и исполняют один код. Пример приложения с симметричными потоками — электронные доски объявлений (Bulletin Board Systems, BBS). Для каждого звонящего туда BBS запускает новый поток для обслуживания пользователя. К приложению можно добавлять новые симметричные потоки по мере возрастания нагрузки.

Обзор класса tThread в Delphi

Delphi представляет программисту полный доступ к возможностям программирования интерфейса Win32 – класс TThread. Класс TThread — это прекрасный пример предоставления разработчику простого доступа к программированию потоков. Другая отличительная черта класса TThread — это гарантия совместимости с библиотекой визуальных компонентов VCL. Без использования класса TThread во время вызовов VCL могут произойти ситуации гонок.

Рассмотрим некоторые свойства, методы и события класса TThread.

Свойства

 

Методы

 

События

FreeOnTerminate - освобождать ли память, выделенную под экземпляр класса процесса, когда этот процесс завершается. Если True - при завершении процесса (или при вызове метода Terminate) экземпляр класса автоматически освобождается (аналогично вызову метода Free). Тип: Boolean;   Handle (ThreadID) - дескриптор процесса. Эта величина может быть использована для управления процессом через функции WinAPI. Тип: THandle;   ReturnValue - возвращаемое значение при завершении процесса. Тип: Integer;   Priority - приоритет процесса. Возможные значения этого свойства мы разберем немного позже. Тип: TThreadPriority;   Suspended - показывает, в каком состоянии находится процесс: True - приостановлен, False - в нормальном. Тип: Boolean;   Terminated - показывает, завершен ли процесс. True - завершен, False - нет. Тип: Boolean;  

 

Create(CreateSuspended: Boolean) - создает экземпляр класса. Параметр CreateSuspended указывает на то, нужно ли создавать приостановленную задачу (True), или запускать ее сразу (False);   Suspend - приостанавливает выполнение процесса;   Resume - продолжает выполнение процесса после Suspend;   Terminate - полностью прекращает выполнение процесса;   WaitFor - ждет завершения процесса, возвращая затем код его завершения (ReturnValue);   Synchronize(Method: TThreadMethod) - синхронизирует выполнение метода процесса, позволяя ему работать параллельно с другими процессами.

 

OnTerminate - возникает, когда процесс находится в стадии завершения.