Разработка многопоточных приложений. Рудалев В.Г - 7 стр.

UptoLike

7
ни закрыть . При нажатии кнопки «Создать поток» окно программы будет вести
себя обычным, «дружелюбным» образом .
2. Для вывода строки текста вместо «напрашивавшихся» визуальных
средств Delphi использовалась функция API TextOut. Дело в том, что подавляю -
щее большинство визуальных компонентов Delphi стабильно работают только
внутри главного потока приложения . Исключением являются компоненты для
доступа к базам данных и графические классы , работающие с TCanvas (с послед-
ними необходимо использовать блокировки холста Lock и UnLock [4]). Если же
без компонентов Delphi внутри дополнительных потоков обойтись нельзя , то для
создания таких потоков рекомендуется использовать специализированный класс
TThread, входящий в библиотеку Delphi.
3. Класс TThread
Класс TThread инкапсулирует функции API программирования потоков.
Его основными преимуществами являются удобство использования , свойствен-
ное всем классам - надстройкам , и наличие специального метода Synchronize для
корректного использования внутри потоков визуальных компонентов VCL Del-
phi.
Свойства и методы класса
TThread
constructor Create
(CreateSuspensed:
Boolean);
Создает поток. Если аргумент имеет значение False,
созданный поток немедленно начинает выполнение
( управление передается методу Execute) . Если True
поток ожидает вызова метода Resume
destructor De-
stroy: override;
Завершает поток и освобождает все ресурсы , им за-
нятые. Вызывается автоматически при завершении
метода Execute
procedure Resume;
Возобновляет поток после приостановки
procedure Suspend;
Приостанавливает поток
property Sus-
pended: Boolean;
При записи True/False приостанавлива-
ет/ возобновляет поток. При чтении показывает, не
приостановлен ли поток
procedure Termi-
nate;
Устанавливает свойство Terminated в True. При ис-
пользовании этого метода для завершения потока
метод Execute должен включать в себя проверку
свойства Terminated (см . лаб . раб . 2).
property Termi-
nated: Boolean;
Показывает True, если ранее был вызван метод Ter-
minate.
function WaitFor:
integer;
Приостанавливает текущий поток до завершения
заданного потока и возвращает код завершения .
Например, внутри потока T1 вызов
code:=T2.WaitFor приостанавливает T1 до заверше-
ния T2
property Handle:
THandle;
Дескриптор потока
низакры ть. П ринаж атиикноп ки« Создать п оток» окно п рог раммы б удет вести
себ я об ы чны м, « друж елю б ны м» об разом.
        2. Д ля вы вода строки текста вместо « нап раш ивавш ихся» визуальны х
средств Delphi исп ользовалась ф ункция API TextOut. Д ело в том, что п одавляю -
щ ее б ольш инство визуальны х комп онентов Delphi стаб ильно раб отаю т только
внутри г лавног о п отокап рилож ения. И склю чением являю тся комп оненты для
доступ ак б азам данны х иг раф ические классы , раб отаю щ иесTCanvas (сп ослед-
ниминеоб ходимо ис      п ользовать б локировкихолстаLock иUnLock [4]). Е слиж е
б ез комп онентов Delphi внутридоп олнительны х п отоков об ойтись нельзя, то для
создания таких п отоков рекомендуется исп ользовать сп ециализированны й клас   с
TThread, входящ ий в б иб лиотеку Delphi.

       3. Класс TThread

        К лассTThread инкап сулирует ф ункции API п рог раммирования п отоков.
Е г о основны мип реимущ ествами являю тся удоб ство исп ользования, свойствен-
ное всем клас  сам-надстройкам, и наличие сп ециальног о методаSynchronize для
корректног о исп ользования внутрип отоков визуальны х комп онентов VCL Del-
phi.
С во йства и м ето ды класса TThread
 constructor Create Создаетп оток. Е слиарг ументимеетзначениеFalse,
 (CreateSuspensed:          созданны й п оток немедленно начинаетвы п олнение
 Boolean);                  (уп равлениеп ередается методу Execute) . Е слиTrue
                            – п оток ож идаетвы зоваметодаResume
 destructor De-             Заверш аетп оток иосвоб ож даетвсерес     урсы , им за-
 stroy: override;           няты е. В ы зы ваетс
                                               я автоматическип ризаверш ении
                            методаExecute
 procedure Resume;          В озоб новляетп оток п ослеп риостановки
 procedure Suspend; П риостанавливаетп оток
 property Sus-              П ризап исиTrue/False п риостанавлива-
 pended: Boolean;           ет/возоб новляетп оток. П ричтениип оказы вает, не
                            п риостановлен лип оток
 procedure Termi-           Ус танавливаетсвойство Terminated в True. П риис      -
 nate;                      п ользованииэтог о методадля заверш ения п отока
                            метод Execute долж ен вклю чать в с  еб я п роверку
                            свойстваTerminated (см. лаб . раб . № 2).
 property Termi-            П оказы ваетTrue, еслиранееб ы л вы зван метод Ter-
 nated: Boolean;            minate.
 function WaitFor:          П риостанавливаеттекущ ий п оток до заверш ения
 integer;                   заданног о п отокаивозвращ аеткод заверш ения.
                            Н ап ример, внутрип отокаT1 вы зов
                            code:=T2.WaitFor п риостанавливаетT1 до заверш е-
                            ния T2
 property Handle:           Д ескрип тор п отока
 THandle;

                                                                                 7