Работа в отдельном потоке, которая не мешает основной программеDelphi , Компоненты и Классы , ПотокиРабота в отдельном потоке, которая не мешает основной программеАвтор: Xavier Pacheco unit ThrdU; interface uses Classes; type TTestThread = class(TThread) private Answer: integer; protected procedure GiveAnswer; procedure Execute; override; end; implementation uses SysUtils, Main; { TTestThread } procedure TTestThread.GiveAnswer; begin MainForm.Edit1.Text := InttoStr(Answer); end; procedure TTestThread.Execute; var I: Integer; begin FreeOnTerminate := True; for I := 1 to 2000000 do begin if Terminated then Break; Inc(Answer, Round(Abs(Sin(Sqrt(I))))); Synchronize(GiveAnswer); end; end; end. unit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ThrdU; type TMainForm = class(TForm) Edit1: TEdit; Button1: TButton; Memo1: TMemo; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.DFM} procedure TMainForm.Button1Click(Sender: TObject); begin TTestThread.Create(False); end; end. Перевод контента на русский язык: Код, предоставленный ниже, демонстрирует, как запустить отдельный поток в Delphi, который может быть полезен для выполнения задач без блокировки основного программы. Вот разбивка на части:
Единица Основной проблемой этого кода является то, что он не очень эффективен. Он не выполняет ничего полезного, просто инкрементирует переменную в цикле. В реальном приложении вы, вероятно, хотели бы выполнить некоторые конкретные задачи, такие как чтение или запись данных из файла или базы данных, отправку запросов по сети и т.д. Еще одна проблема - это то, что поток выполняется бесконечно, пока не будет остановлен вручную. Если основная программа завершается до тех пор, как поток не выполнит свою работу, это может привести к утечкам памяти и другим проблемам. Более robust решение было бы дать пользователю возможность остановить поток в какой-то момент. Вот возможное альтернативное реализацию:
В этом варианте класс Процедура В статье описана реализация работы в отдельном потоке на языке Delphi, которая не влияет на основную программу и позволяет выполнить задачи в фоновом режиме. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |