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

UptoLike

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