Разработка демонстрационного многопоточного приложения с динамическим изменением свойств окна и компонент

Возможность разработки новых компонент собственными средствами Delphi. Возможность сохранения данных в файле и их загрузки при следующем запуске программы после остановки потока. Использование компонента TThread для реализации многопоточного приложения.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.05.2018
Размер файла 69,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Оглавление

Введение

Постановка задачи

1. Выбор средств реализации

2. Разработка программного обеспечения

2.1 Документация разработанной программы

Вывод

Список используемой литературы

Листинг программы

1.

Введение

Для решения задачи, поставленной в курсовой работе, используется язык программирования Delphi.

Delphi - это продукт Borland International для быстрого создания приложений. Высокопроизводительный инструмент визуального построения приложений включает в себя настоящий компилятор кода и предоставляет средства визуального программирования, несколько похожие на те, что можно обнаружить в Microsoft Visual Basic или в других инструментах визуального проектирования. В основе Delphi лежит язык Object Pascal, который является расширением объектно-ориентированного языка Pascal. В Delphi также входят локальный SQL-сервер, генераторы отчетов, библиотеки визуальных компонентов, и прочее хозяйство, необходимое для того, чтобы чувствовать себя совершенно уверенным при профессиональной разработке информационных систем или просто программ для Windows-среды.

Это среда разработки, используемой прежде всего для создания и поддержки приложений, предназначенных как для отдельных персональных компьютеров, так и для серверов. Delphi, как и разработанные с ее помощью приложения, могут функционировать под практически любой 32 разрядной операционной системой Windows. Это довольно легкая в изучении среда, и в то же время довольно сложная. Изучить ее полностью и досконально - невозможно.

Прежде всего, Delphi предназначен для профессиональных разработчиков, желающих очень быстро разрабатывать приложения в архитектуре клиент-сервер. Delphi производит небольшие по размерам (до 15-30 Кбайт) высокоэффективные исполняемые модули (.exe и .dll), поэтому в Delphi должны быть прежде всего заинтересованы те, кто разрабатывает продукты на продажу. С другой стороны небольшие по размерам и быстро исполняемые модули означают, что требования к клиентским рабочим местам существенно снижаются - это имеет немаловажное значение и для конечных пользователей.

Delphi имеет пользовательский графический интерфейс, подобный Visual Basic и C++. Человек, ранее работавший в подобной среде, не будет чувствовать себя не в своей тарелке. Честно говоря, на данный момент множество фирм приняло за стандарт данный интерфейс для собственных приложений. Хорошим стимулом к получению знаний по данному предмету является знание хоть какого-нибудь языка программирования, или принципов написания программы. Идеально - знание языка программирования Pascal. Ведь весь исходный текст программы на Дельфи пишется на языке Object Pascal, практически ничем не отличающимся от принципов, заложенных в такой знаменитой программной оболочке. Синтаксис, принцип модуля, процедуры, функции, все взято за основу.

Огромный плюс Delphi - это визуальная технология программирования. Создавая или модифицируя свой программный продукт, пользователь не зная или не обращая внимания на некоторые свойства элемента программы, а используя только необходимые, пишет полностью готовый рабочий продукт, порой выступающий на равных по сложности, с написанными на невизуальном редакторе.

Преимущества Delphi по сравнению с аналогичными программными продуктами:

ь простой и мощный язык программирования Pascal;

ь быстрота разработки приложения;

ь высокая производительность разработанного приложения;

ь низкие требования разработанного приложения к ресурсам компьютера;

ь наращиваемость за счет встраивания новых компонент и инструментов в среду Delphi;

ь возможность разработки новых компонент и инструментов собственными средствами Delphi (существующие компоненты и инструменты доступны в исходных кодах);

ь удачная проработка иерархии объектов.

ь обширная объектная библиотека VCL;

Возможности Delphi полностью отвечают требованиям курсовой работы и подходят для создания систем любой сложности. Поэтому мой выбор остановился на Delphi.

Постановка задачи

Разработка демонстрационного многопоточного приложения с динамическим изменением свойств окна и компонент.

Основные требования: Наличие кнопок «Запуск потока», «Остановка потока», «Завершение потока» по нажатию на которые соответственно начинается, останавливается и завершается демонстрация работы потока. Запуск потока после его остановки должен выполняться с состояния, в котором поток был остановлен. После остановки потока обеспечить возможность сохранения данных в файле и загрузки их при следующем запуске программы. Для реализации многопоточного приложения использовать компонент TThread.

1. Выбор средств реализации

Выбор среды разработки.

В данной курсовой работе мы будем использовать такую среду разработки как Delphi.

Delphi --, ранее Borland Delphi и CodeGear Delphi, -- интегрированная среда разработки ПО для Microsoft Windows, Mac OS, iOS и Android на языке Delphi (ранее носившем название Object Pascal), созданная первоначально фирмой Borland и на данный момент принадлежащая и разрабатываемая Embarcadero Technologies. delphi многопоточный компонент запуск

Borland Delphi представляет собой средство разработки приложений для Microsoft Windows. Delphi является мощным и простым в использовании инструментом для создания автономных программ, обладающих графическим интерфейсом (GUI), или 32-битных консольных приложений (программ, которые не имеют графического интерфейса).

В сочетании с Borland Kylix, программисты Delphi могут создавать из одного исходного текста приложения и для Windows и для Linux, и это открывает новые возможности и увеличивает потенциальную отдачу от усилий, вложенных в изучение Delphi. В Delphi используется кросс-платформенная библиотека компонентов CLX и визуальные дизайнеры для создания высокопроизводительных приложений для Windows, которые повторной компиляцей можно легко превратить в приложения для Linux.

Delphi является первым языком программирования, обладающим простой в использовании средой для быстрой разработки приложений, разрушающей барьеры между языками высокого уровня, и языками, на низком уровне разговаривающими с системой на языке битов и байтов.

Работа с потоками.

Потоки -- это наборы команд, которые могут получать время процессора. Время процессора выделяется квантами. Квант времени -- это минимальный интервал, в течение которого только один поток использует процессор.

Часто разработчику приходится сталкиваться с проблемой, когда необходимо одновременное выполнение нескольких задач одного приложения. Для решения этой и других проблем разработчику на Delphi предоставлены в распоряжение средства, позволяющие реализовать так называемую многопоточностъ. Многопоточность используется для:

- обхода медленных процессов. Когда используется только один поток, приложение может приостановить свое выполнение на то время, пока им завершается какой-либо медленный процесс (доступ к диску, связь с другим компьютером по сети и т. д.). Центральный процессор компьютера в данный момент находится в режиме ожидания и практически не выполняет никаких команд. С использованием многопоточности ваше приложение может продолжать выполнение других потоков, пока один из потоков ожидает завершение медленного процесса;

- организации поведения приложения. Благодаря использованию потоков, вы можете организовать выполнение частей приложения так, как вам захочется. Например, вы можете для каждой задачи приложения (если каждой задаче выделен свой поток) распределить приоритеты выполнения. Таким образом, задача, имеющая наибольший приоритет, будет занимать больше процессорного времени, что очень важно для решения критических задач;

- поддержки мультипроцессорной обработки. Если в компьютере, на котором запущено многопоточное приложение, имеется несколько процессоров, то можно значительно увеличить скорость выполнения вашего приложения, направляя на каждый процессор свой поток.

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

Существуют две модели применения потоков -- асимметричная и симметричная.

В рамках асимметричной модели потоки решают различные задачи и, как правило, не разделяют совместные ресурсы. Один из таких потоков отвечает за печать; другой обрабатывает сообщения от клавиатуры и мыши; третий заведует автоматическим сохранением документа пользователя.

В симметричной модели потоки выполняют одну и ту же работу, разделяют одни ресурсы и исполняют один код. Пример приложения с симметричными потоками -- практически любая крупная клиент/серверная СУБД. Для обслуживания каждой транзакции запускается, как правило, отдельный новый поток. К приложению можно добавлять новые симметричные потоки по мере возрастания нагрузки (числа запросов).

Потоки и процессы.

Когда мы говорим "программа", то обычно имеем в виду понятие, в терминологии операционной системы обозначаемое как "процесс". Процесс состоит из виртуальной памяти, исполняемого кода, потоков и данных. Процесс может содержать много потоков, но обязательно содержит по крайней мере один. Поток, как правило, имеет "в собственности" минимум ресурсов; он зависит от процесса, который и распоряжается виртуальной памятью, кодом, данными, файлами и другими ресурсами ОС.

Почему мы используем потоки вместо процессов, хотя, при необходимости, приложение может состоять и из нескольких процессов? Дело в том, что переключение между процессами -- значительно более длительная операция, чем переключение между потоками. Другой довод в пользу применения потоков -- то, что они специально задуманы для совместного использования ресурсов; разделить ресурсы между процессами (имеющими раздельное адресное пространство) не так-то просто.

Приоритеты потоков

Интерфейс Win 32 API позволяет программисту управлять распределением времени между потоками; это распространяется и на приложения, написанные на Delphi. Операционная система планирует время процессора в соответствии с приоритетами потоков. Когда поток создается, ему назначается приоритет, соответствующий приоритету породившего его процесса. В свою очередь, процессы могут иметь следующие классы приоритетов.

-Реального времени (Real time)

-Высокий (High)

-Нормальный (Normal)

-Фоновый (Idle)

Большинство программистов не использует класс реального времени, поскольку он определяет приоритет даже больший, чем у многих процессов операционной системы. Такой приоритет нужен для процессов, обрабатывающих высокоскоростные потоки данных. Если такой процесс не завершится за короткое время, пользователь почувствует, что система перестала откликаться, так как даже обработка событий мыши не получит времени процессора.

Класс с высоким приоритетом также применяется достаточно редко. Его использование ограничено процессами, которые должны завершаться за короткое время, чтобы не вызвать сбойной ситуации. Пример -- процесс, который посылает сигналы внешнему устройству; причем устройство отключается, если не получит своевременный сигнал.

Большинство процессов запускается в рамках класса с нормальным приоритетом. Нормальный приоритет означает, что процесс не требует какого-либо специального внимания со стороны операционной системы.

Процессы с фоновым приоритетом запускаются лишь в том случае, если в очереди Диспетчера задач нет других процессов. Обычные виды приложений, использующие такой приоритет, -- это программы-заставки и системные агенты (system agents). Программисты могут использовать фоновые процессы для организации завершающих операций и реорганизации данных. Примерами могут служить автосохранение документа или базы данных.

Приоритеты имеют численные значения от 0 до 31. Процесс, породивший поток, может впоследствии изменить его приоритет; в этой ситуации программист имеет возможность управлять скоростью отклика каждого потока.

Способы реализации потоков.

1) В ядре системы (ОС Windows)

- преимущества:

? планировщик процессора знает о наличии потоков и

может учитывать их при планировании процессорного

времени;

? блокировка отдельного потока не оказывает влияния на

другие потоки процесса.

- недостатки:

? на переход в режим ядра и обратно при выполнении

операций над потоками требуется время;

? введение потоков нередко значительно снижает

стабильность ядра ОС.

2) На уровне пользовательских функций

(большинство версий Unix)

- преимущества:

? операции над потоками выполняются быстрее;

? не требуют модификации ядра ОС, оно остается

простым и, как следствие, стабильным.

- недостатки:

? блокировка одного потока может заблокировать весь

процесс, т.к. планировщик процессора не знает о

наличии в нем других потоков;

? время процессора делится поровну между процессами

без учета количества потоков в них.

Класс TThread.

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

-с помощью Мастера;

-вручную.

1. Мастер создания дополнительного потока в Delphi создаёт отдельный модуль, в рамках которого выполняется поток. Выполним:

File -> New -> Other...

В появившейся табличке выбора найдём TThread Object. Появится окошко, в верхнюю строку которого (Class Name) введём имя нашего будущего потока: MyThread. В результате будет создан модуль, содержащий заготовку кода, реализующего дополнительный поток Delphi.

2. В первом способе класс MyThread был создан мастером в дополнительном модуле. Второй способ состоит в том, что мы сами создаём такой класс в рамках одного из уже существующих модулей программы, например, в модуле Unit1.

Изучение класса TThread начнем с конструктора:

constructor Create(CreateSuspended: Boolean);

В качестве аргумента он получает параметр CreateSuspended. Если его значение равно True, вновь созданный поток не начинает выполняться до тех пор, пока не будет сделан вызов метода Resume. В случае, если CreateSuspended имеет значение False, поток начинает исполнение и конструктор завершается.

destructor Destroy; override;

Деструктор Destroy вызывается, когда необходимость в созданном потоке отпадает. Деструктор завершает его и высвобождает все ресурсы, связанные

С Объектом TThread. procedure Resume; Метод Resume класса TThread вызывается, когда поток возобновляется после остановки, или если он был создан с параметром CreateSuspended равным

True. procedure Suspend;

Вызов метода suspend приостанавливает поток с возможностью повторного запуска впоследствии. Метод suspend приостанавливает поток вне зависимости от кода, исполняемого потоком в данный момент; выполнение продолжается с точки останова.

property Suspended: Boolean;

Свойство suspended позволяет программисту определить, не приостановлен ли поток. С помощью этого свойства можно также запускать и останавливать поток. Установив suspended в True, вы получите тот же результат, что и при вызове метода Suspend -- приостановку. Наоборот, установка Suspended в False возобновляет выполнение потока, как и вызов метода Resume.

function Terminate: Integer;

Для окончательного завершения потока (без последующего запуска) существует метод Terminate; он останавливает поток и возвращает управление вызвавшему процессу только после того, как это произошло. Значение, возвращаемое функцией Terminate, соответствует состоянию потока. Примерами возможных состояний являются случай нормального завершения и случай, когда к моменту вызова Terminate поток уже завершился (или был завершен из другого потока).

property Terminated: Boolean;

Свойство Terminated позволяет узнать, произошел ли уже вызов метода Terminate ИЛИ нет.

function WaitFor: Integer;

Метод WaitFor предназначен для синхронизации и позволяет одному потоку дождаться момента, когда завершится другой поток. Если вы внутри потока под именем FirstThread пишете код:

Code := SecondThread.WaitFor;

то это означает, что поток FirstThread останавливается до момента завершения потока SecondThread. Метод WaitFor возвращает код завершения ожидаемого потока.

Property Handle: THandle read FHandle;

Property ThreadID: THandle read FThreadID;

Свойства Handle и ThreadID дают программисту непосредственный доступ к потоку средствами Win 32 API. Если разработчик хочет обратиться к потоку и управлять им, минуя возможности класса TThread, значения Handle и ThreadID могут быть использованы в качестве аргументов функций Win 32 API. Например, если программист хочет перед продолжением выполнения приложения дождаться завершения сразу нескольких потоков, он должен вызвать функцию API waitForMultipleObjects; для ее вызова необходим массив дескрипторов потоков.

property Priority: TThreadPriority;

Свойство priority позволяет запросить и установить приоритет потоков. Приоритет определяет, насколько часто поток получает время процессора. procedure Synchronize(Method: TThreadMethod);

Этот метод относится к секции protected, то есть может быть вызван только из потомков TThread. Delphi предоставляет программисту метод Synchronize для безопасного вызова методов VCL внутри потоков. Во избежание ситуаций гонок, метод Synchronize дает гарантию, что к каждому объекту VCL одновременно имеет доступ только один поток. Аргумент, передаваемый в метод Synchronize, -- это имя метода, который производит обращение к VCL; вызов Synchronize с этим параметром -- это то же, что и вызов самого метода. Такой метод (класса TThreadMethod) не должен иметь никаких параметров и не должен возвращать никаких значений.

2. Разработка программного обеспечения

2.1 Документация разработанной программы

В разработанной программе используются такие модули:

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls.

Так же используются такие компоненты:

· Label1: TLabel;-значение процессорного времени работы потока 1

· Label2: TLabel;-значение процессорного времени работы потока 2

· Label3: TLabel;-значение процессорного времени работы потока 3

· Label4: TLabel; - метка остановки потока

· CheckBox1: TCheckBox;-метка остановки/возобновления потока 1

· CheckBox2: TCheckBox;-метка остановки/возобновления потока 2

· CheckBox3: TCheckBox;-метка остановки/возобновления потока 3

· Button1: TButton; - кнопка запуска потока

· Button2: TButton; - кнопка завершения потока

· Button3: TButton; - кнопка для открытия списка старых значений потока из файла

· Button4: TButton; - кнопка для сохранения значений потока в файл формата txt

· Button5: TButton; - кнопка для записи значений потока в предназначенное поле

· ProgressBar1: TProgressBar;- датчик работы потока 1

· ProgressBar2: TProgressBar;- датчик работы потока 2

· ProgressBar3: TProgressBar;- датчик работы потока 3

· Memo1: TMemo;-окно отображения сохраненного времени работы потока

И функции:

· procedure Button1Click(Sender: TObject); - для запуска потока

· procedure TForm1.Button2Click(Sender: TObject); -для завершения потока

· procedure TForm1.Button3Click(Sender: TObject); - для открытия старых значений процессорного времени работы потоков

· procedure TForm1.Button4Click(Sender: TObject); - для сохранения текущих значений процессорного времени работы потоков

· procedure TForm1.Button5Click(Sender: TObject); - для записи значений потока в предназначенное поле

· procedure TForm1.CheckBox1Click(Sender: TObject); - для приостановления и возобновления работы потока(а также TForm1.CheckBox2Click(Sender: TObject); и TForm1.CheckBox3Click(Sender: TObject); )

· procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); - для закрытия формы

1) Процедура Button1Click

Процедура обрабатывает событие на нажатии кнопки «Запуск потока». В данной процедуре программа запускает потоки 1,2,3, значения процессорного времени работы потоков также изменяются на объектах Label 1,2,3.

1) Процедура Button2Click

Процедура обрабатывает событие при нажатии кнопки «Завершение потока». В данной процедуре программа завершает работу потоков 1,2,3, значения процессорного времени работы потоков также прекращают изменяться на объектах Label 1,2,3.

2) Процедура Button3Click

Процедура обрабатывает событие при нажатии кнопки «open old». В данной процедуре программа очищает поле компонента TMemo1, загружая из текстового файла предыдущие значения остановленных потоков.

3) Процедура Button4Click

Процедура обрабатывает событие при нажатии кнопки «save». Здесь программа перезаписывает данные в файле хранения значений потоков.

4) Процедура Button5Click

Процедура обрабатывает событие при нажатии кнопки «Capture». Здесь программа очищает поле компонента TMemo1,после чего добавляет значения текущих остановленных потоков в очищенное поле объекта TMemo1.

5) Процедуры CheckBox1Click, CheckBox2Click, CheckBox3Click

Каждая процедура обрабатывает событие при нажатии на объект CheckBox1,2 или 3. При этом программа приостанавливает выбранный поток, значения процессорного времени работы потока также прекращают изменяться на объектах Label 1,2,3 до повторного нажатия на объект.

6) Процедура TForm1.FormClose

Данная процедура обрабатывает событие завершения работы с Form1.

Общие сведения

Созданный программный продукт предназначен для демонстрации многопоточного приложения. Пользователь может воспользоваться функциями запуска, приостановки потоков и полного их завершения. А также совершать простые действия с результатами процессорного времени работы потока.

Описание диалога с пользователем

Рисунок 1. Окно готовой программы.

После запуска программы на экране появляется окно программы.

Вывод

В результате выполнение курсовой работы было создано и реализовано демонстрационное многопоточное приложение с динамическим изменением свойств окна и компонент.

Кроме практических результатов при выполнении курсовой работы был изучен теоретический материал по классу TThread. Для программной реализации поставленной задачи были изучены теоретические материалы по языку программирования Delphi.

Список используемой литературы

1. Уроки делфи. [Электронный ресурс]. URT: http://maksakov-sa.ru/TeorDelphi/FailDelphi/index.html

2. Компоненты делфи. [Электронный ресурс]. URT: http://delphicomponent.ru/

3. Диалоги открытия и сохранения в делфи. [Электронный ресурс]. URT: http://mydelphiprogramms.jimdo.com/2012/03/23/delphi-диалоги-открытия-и-сохранения-файлов/

4. MessageBox в делфи. [Элекстронный ресурс]. URT: http://clickoman.narod.ru/help/delphi_mess.html

5. Уроки делфи. [Элекстронный ресурс]. URT: http://www.delphi-manual.ru/lesson1.php

6. Работа с EXCEL из Delphi http://basicsprog.ucoz.ru/blog/2011-09-30-8

7. Василий Корняков. Программирование документов MS Word в Delphi / Василий Корняков // Программирование документов и приложений MS Office в Delphi - Санкт Петербург, 2005 - 41-188с.

Листинг программы

Код основной программы:

unit MainUnit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls;

type

TForm1 = class(TForm)

ProgressBar1: TProgressBar;

ProgressBar2: TProgressBar;

ProgressBar3: TProgressBar;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

Button1: TButton;

Button2: TButton;

Memo1: TMemo;

Button3: TButton;

Button4: TButton;

Label4: TLabel;

Button5: TButton;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure CheckBox1Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses ThreadUnit;

{$R *.dfm}

var

Thread1, Thread2, Thread3: TMyThread;

procedure TForm1.Button1Click(Sender: TObject);

begin

Thread1 := TMyThread.Create(True);

Thread1.Priority := tpIdle;

Thread1.ProgressBar := ProgressBar1;

Thread1.Lbl := Label1;

Thread2 := TMyThread.Create(True);

Thread2.Priority := tpIdle;

Thread2.ProgressBar := ProgressBar2;

Thread2.Lbl := Label2;

Thread3 := TMyThread.Create(True);

Thread3.Priority := tpIdle;

Thread3.ProgressBar := ProgressBar3;

Thread3.Lbl := Label3;

Thread1.Resume;

Thread2.Resume;

Thread3.Resume;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Thread1.Terminate;

Thread2.Terminate;

Thread3.Terminate;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.LoadFromFile('1.txt');

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Memo1.Lines.SaveToFile('1.txt');

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(Label1.Caption);

Memo1.Lines.Add(Label2.Caption);

Memo1.Lines.Add(Label3.Caption);

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

var

Suspended: Boolean;

begin

Suspended := (Sender as TCheckBox).Checked;

case (Sender as TCheckBox).Tag of

1:

Thread1.Suspended := Suspended;

2:

Thread2.Suspended := Suspended;

3:

Thread3.Suspended := Suspended;

end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Thread1 := TMyThread.Create(True);

Thread1.Priority := tpIdle;

Thread1.ProgressBar := ProgressBar1;

Thread1.Lbl := Label1;

Thread2 := TMyThread.Create(True);

Thread2.Priority := tpIdle;

Thread2.ProgressBar := ProgressBar2;

Thread2.Lbl := Label2;

Thread3 := TMyThread.Create(True);

Thread3.Priority := tpIdle;

Thread3.ProgressBar := ProgressBar3;

Thread3.Lbl := Label3;

Thread1.Resume;

Thread2.Resume;

Thread3.Resume;

Thread1.Terminate;

Thread2.Terminate;

Thread3.Terminate;

end. Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.