ВУЗ:
Составители:
Рубрика:
10
begin
Thread1:=TSimpleThread.Create(False);//Создание потока
Thread1.Priority := tpLowest; // Приоритет
Thread1.Count := 0; // Начальное значение счетчика
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Thread1.Terminate; // Завершаем бесконечный поток
end;
end.
Результат выполнения программы :
Комментарии
1. Аргументом метода Synchronize является имя метода (но не процеду -
ры!), который обращается к объектам VCL. Последний метод должен быть
оформлен в виде процедуры без аргументов. Например, выше для вывода в строку
редактирования Edit1 был определен метод потока
procedure TSimpleThread.OutMessage;
begin
Form1.Edit1.Text := IntToStr(count);
end;
а внутри метода Execute потока происходил вызов
Synchronize(OutMessage);
Метод Synchronize здесь необходим , чтобы во время записи в объект Edit1
заблокировать главный поток приложения : работающий главный поток позволяет
компонентам , расположенным в окне, обмениваться сообщениями; при этом мо-
жет наступить ситуация гонок, например, одновременное присваивание
Form1.Edit1.Text := IntToStr(count);
begin Thread1:=TSimpleThread.Create(False);//Создание потока Thread1.Priority := tpLowest; // Приоритет Thread1.Count := 0; // Начальное значение счетчика end; procedure TForm1.Button2Click(Sender: TObject); begin Thread1.Terminate; // Завершаем бесконечный поток end; end. Результатвы п олнения п рог раммы : Ко м м ен тарии 1. А рг ументом методаSynchronize является имя м ет ода (н о н е пр оцеду - р ы!), которы й об ращ ается к об ъ ектам VCL. П оследний метод долж ен б ы ть оф ормлен в видеп роцедуры б езарг ументов. Н ап ример, вы ш едля вы водав строку редактирования Edit1 б ы л оп ределен метод п отока procedure TSimpleThread.OutMessage; begin Form1.Edit1.Text := IntToStr(count); end; авнутриметодаExecute п отокап роисходил вы зов Synchronize(OutMessage); М етод Synchronize здесь необ ходим, чтоб ы во время зап ис ив об ъ ектEdit1 заб локировать г лавны й п оток п рилож ения: раб отаю щ ий г лавны й п оток п озволяет комп онентам, рас п олож енны м в окне, об мениватьс я сооб щ ениями; п риэтом мо- ж етнас туп ить ситуация г онок, нап ример, одновременноеп рисваивание Form1.Edit1.Text := IntToStr(count); 10
Страницы
- « первая
- ‹ предыдущая
- …
- 8
- 9
- 10
- 11
- 12
- …
- следующая ›
- последняя »