- •Delphi функции для работы с файлами
- •Работа с дополнительными формами Delphi
- •Работа с дополнительными формами Delphi
- •Форма Form1 содержит вызов формы Form2, которая объявлена в модуле Unit2, но который отсутствует в списке используемых модулей. Вы хотите добавить его?
- •Создание собственных процедур и функций Delphi
- •Пример. Вычисление факториала
- •Урок Delphi 10 Обработка исключительных ситуаций в Delphi
- •Компоненты Delphi Урок 11 Обзор палитры компонентов Delphi
- •Страница Standart
- •Страница Standart
- •Страница System
- •Страница System
- •Компонент Delphi Timer
- •Урок Delphi 12 Работа со строками Delphi
- •StringList Delphi - работа со списком строк
- •Обзор алгоритмов сортировки
- •Модификация: Алгоритм сортировки вставками и его реализация в Delphi
- •Урок Delphi 13 Создание интерфейса пользователя
- •Урок Delphi 14: Мультимедийные возможности Delphi Графика в Delphi
- •Потоки в Delphi Организация многопоточной работы в Delphi
- •Применение потоков
- •Особености взаимодействия потоков с объектами vcl
- •Использование метода Synchronize при работе с потоками
- •Компоненты Delphi Динамическое создание компонентов в Delphi
- •С чего начать изучение программирования?
Потоки в Delphi Организация многопоточной работы в Delphi
Потоки в Delphi выполняют функцию имитации псевдопараллельной работы приложения. Как известно, для организации многозадачности операционная система выделяет каждому приложению, выполняющемуся в настоящий момент, определённые кванты времени, длина и количество которых определяется его приоритетом. Поэтому объём работы, который приложение может выполнить, определяется тем, сколько таких квантов оно сможет получить в единицу времени. Для операционной системы каждый поток является самостоятельной задачей, которой выделяются кванты времени на общих основаниях. Поэтому приложение Delphi, умеющее создать несколько потоков, получит больше времени операционной системы, и соответственно сможет выполнить больший объём работы. Создать дополнительный поток в Delphi поможет объект TThread. Ввести объект TThread в программу можно двумя способами:
с помощью Мастера;
вручную.
1. Мастер создания дополнительного потока в Delphi создаёт отдельный модуль, в рамках которого выполняется поток. Выполним: File -> New -> Other... В появившейся табличке выбора найдём TThread Object. Появится окошко, в верхнюю строку которого (Class Name) введём имя нашего будущего потока: MyThread. В результате будет создан модуль, содержащий заготовку кода, реализующего дополнительный поток Delphi:
unit Unit2; // Имя модуля, содержащего поток. При сохранении его можно изменить. interface uses Classes; type MyThread = class(TThread) //MyThread - заданное нами имя потока. private { Private declarations } protected procedure Execute; override; end; implementation { Important: Methods and properties of objects in visual components can only be used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure MyThread.UpdateCaption; begin Form1.Caption := 'Updated in a thread'; end; } { MyThread } procedure MyThread.Execute; begin { Place thread code here } end; end.
2. В первом способе класс MyThread был создан мастером в дополнительном модуле. Второй способ состоит в том, что мы сами создаём такой класс в рамках одного из уже существующих модулей программы, например, в модуле Unit1: unit Unit1; //Обычный модуль в котором описывается основная программа interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; //Здесь необходимо описать класс TMyThread: TMyThread = class(TThread) private { Private declarations } protected procedure Execute; override; end; var Form1: TForm1; //Нужно ввести переменную класса TMyThread MyThread: TMyThread; implementation {$R *.dfm} //Нужно создать процедуру Execute, уже описанную в классе TMyThread procedure TMyThread.Execute; begin //Здесь описывается код, который будет выполняться в потоке end;
Если поток создаётся мастером, т.е. в другом модуле, то не забудьте в основном модуле описать переменную - экземпляр потока, как указано выше. Также, поскольку класс потока описан в другом модуле, имя этого модуля необходимо добавить в секцию uses. Теперь можно запускать поток, даже если в его процедуре Execute нет ни единого оператора. //Запускать поток будем нажатием на кнопку: procedure TForm1.Button1Click(Sender: TObject); begin //Вначале нужно создать экземпляр потока: MyThread:=TMyThread.Create(False); //Параметр False запускает поток сразу после создания, True - запуск впоследствии , методом Resume //Далее можно указать параметры потока, например приоритет: MyThread.Priority:=tpNormal; end; end.
