Delphi→ Многопоточность в Delphi

Авг 14, 2010

Обновление 2022

Потоки — если вам необходимо непрерывное выполнение задач, а именно их параллельность без остановки работы программы скажем по выводу ShowMessage(‘ALARM!’); то потоки дадут лучший результат не подвешивая вашу программу. Особенно потоки необходимы при работе с базами, графикой, сетью, а так же распределенном вычисление на разных машинах,

Недавно освоил азы многопоточности и  решил поделиться рабочим примером.

В примере используется один поток, таким образом, что при работе с сетью графический интерфейс не виснет.

Увлечение количества потоков осуществляется добавлением переменных (создания массива) Thread.

Пример позволяет продолжать работу программы (работать с формой) пока идет закачка содержания страницы http://ya.ru. На сегодняшнее время большенство сайтов переведено на SSL, HTTPS протокол и данные метод может не сработать на 100% со всеми сайтами, использование Delphi и SSL будет описано в отдельной статье или читайте главный FAQ по потокам в Delphi.

unit worklogu;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdHTTP;

type
  TfrmWorklog = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

// объявляем класс, наследующий класс TThread
type
  TMultiThread = class(TThread)
  protected
    // переопределяем метод Execute
    procedure Execute; override;
  end;

var
  frmWorklog: TfrmWorklog;
  // переменная для класса TMultiThread
  Thread: TMultiThread;
  HTTP: TidHTTP;
  DataContent: string;

implementation
{$R *.dfm}

// реализация метода Execute
procedure TMultiThread.Execute;
begin
HTTP := TidHTTP.Create;
try
  DataContent := HTTP.Get('http://ya.ru');
except
// Error
end;
HTTP.Free;
end;

procedure TfrmWorklog.FormCreate(Sender: TObject);
begin
  // создание экземпляра класса
  Thread := TMultiThread.Create(true);
  // после завершения потока, уничтожать его
  Thread.FreeOnTerminate := true;
  // запуск потока
  Thread.Resume;
end;

end.

Похожие статьи:

  1. Компонент Antigate для Delphi
  2. Компоненты в массиве TObjectList
  3. Взаимодействие Oracle и Delphi
  4. Создаем компонент TCP на Winsock (Часть 1)
  5. Создаем компонент TCP на Winsock (Часть 2)

Добавить комментарий

Ваш адрес email не будет опубликован.