На этом шаге будут рассмотрены свойства и методы класса TThread.
Несмотря на то, что Delphi предоставляет программисту все возможности программирования средствами Windows API, в библиотеке VCL имеется специальный класс для реализации потоков - класс TThread. Для чего же потребовалось создавать этот класс? Во-первых, класс TThread делает программирование потоков более удобным. Во-вторых, он обеспечивает безопасную работу с VCL.
Свойства и методы класса TThread представлены в таблицах 1 и 2.
Свойство | Описание |
---|---|
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; |
Идентифицирует поток в системе. |
Метод | Описание |
---|---|
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 и перед уничтожением потока.
На следующем шаге мы изучим основные действия для создания потока.