Шаг 3.
Организация потоков в Delphi-приложениях.
Класс TThread

    На этом шаге будут рассмотрены свойства и методы класса TThread.

    Несмотря на то, что Delphi предоставляет программисту все возможности программирования средствами Windows API, в библиотеке VCL имеется специальный класс для реализации потоков - класс TThread. Для чего же потребовалось создавать этот класс? Во-первых, класс TThread делает программирование потоков более удобным. Во-вторых, он обеспечивает безопасную работу с VCL.

    Свойства и методы класса TThread представлены в таблицах 1 и 2.

Таблица 1. Свойства класса TThread
Свойство Описание
property FreeOnTerminate: Boolean;

Определяет, будет ли объект потока уничтожен автоматически при завершении потока. Если свойство равно True, то поток будет уничтожен автоматически при завершении, если свойство равно False, то поток должен уничтожаться явно в коде приложения.

property Handle: THandle;

Содержит дескриптор потока. Используется для управления потоком с помощью функций Windows API.

property Priority: TThreadPriority;

Определяет приоритет потока относительно других потоков в процессе.

property ReturnValue: Integer;

Определяет значение, возвращаемое потоком при его завершении.

property Suspended: Boolean;

Показывает, является ли поток приостановленным. Если установить свойство в True, то поток будет приостановлен, если установить свойство в False выполнение потока будет продолжено.

property Terminated: Boolean;

Показывает, был ли произведен вызов метода Terminate.

property ThreadID: THandle;

Идентифицирует поток в системе.

Таблица 2. Методы класса TThread
Метод Описание
constructor Create(CreateSuspended: Boolean);

Создает объект потока. Если параметр CreateSuspended равен False, то метод Execute будет вызван сразу. Если параметр CreateSuspended равен True, то метод Execute будет вызван только после вызова метода Resume.

destructor Destroy; override;

Уничтожает объект потока и освобождает память, выделенную для него.

procedure DoTerminate; virtual;

Вызывает событие OnTerminate.

procedure Execute; virtual; abstract;

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

procedure Resume;

Возобновляет выполнение приостановленного потока.

procedure Suspend;

Приостанавливает выполнение потока.

procedure Synchronize(Method: TThreadMethod);

Выполняет метод, вызванный в рамках главного VCL потока.

procedure Terminate;

Дает потоку сигнал на завершение, устанавливая свойство Terminated в значение True.

function WaitFor: LongWord;

Ожидает завершение потока и возвращает значение, определяемое свойством ReturnValue.

    Немного слов о методе Synchronize. Дело в том, что библиотека VCL не защищена от потоков. Все пользовательские компоненты разрабатывались так, что к ним может получить доступ только один поток. И если дополнительно созданный поток и главный поток приложения будут пытаться одновременно, например, вывести что-нибудь в одну область экрана или компонент, то это может привести к ошибке или неадекватной работе приложения. Чтобы этого не произошло и используется метод Synchronize. При его вызове поток останавливается, и управление передается главному потоку, который выполняет процедуру, посланную параметром в метод Synchronize.

    Класс TThread имеет единственное событие - это событие OnTerminate.

    property OnTerminate: TNotifyEvent; - возникает после возврата из метода Execute и перед уничтожением потока.

    На следующем шаге мы изучим основные действия для создания потока.




Предыдущий шаг Содержание Следующий шаг