Потоки в delphi #2

Уже была статья по многопоточности в Delphi. Это можно сказать более подробный урок о потоках, созданных в ручную.

И так напомню, как создать поток вручную, т.е прописать его в коде:
type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;

Т.е мы прописываем новую конструкцию type, только с потоком.
Чтобы не прописывать процедуру Execute, установим курсор на описание процедуры Execute, нажимаем Ctrl+Shift+C, и у нас автоматически создастся процедура Execute:
procedure TMyThread.Execute;
begin
{ test }
end;

В созданной процедуре мы будем писать будущие действия потока TMyThread.
После создания потока и его дальнейшего действия, нужно его запустить. Кинем на форму Button с вкладки Standart, кликнем 2 раза по кнопке, переходя в редактор кода, и напишем следующее:
var MyThread: TMyThread;
begin
MyThread := TMyThread.Create(False);
end;

В этом коде мы сначала объявляем некую переменную MyThread типа TMyThread, далее к MyThread присваиваем создание нашего потока TMyThread. Create(false) обозначает, что поток запустится сразу после его создания. Если поставить значение true, то поток запустится только после того, когда мы вызовем у потока метод Resume.
У потока много разных методов и функций, но перед их использованием стоит установить потоку приоритет, от которого зависит кол-во времени, даваемое ОС для нашего потока.

Приоритет задается с помощью свойства Priority:
MyFirstThread.Priority := tpLower;
Уровни приоритета
tpIdle
tpLowest
tpLower
tpNormal
tpHigher
tpHighest
tpTimeCritical

tpIdle — является самым низким уровнем приоритета, а tpTimeCritical является самым высоким уровнем приоритета.

Рекомендую использовать либо tpLower, либо tpNormal, т.к другие замедляют работу системы.
Чтобы уничтожить поток, следует написать следующее:
MyThread.Terminate;

Можно и приостановить поток на некоторое время:
MyThread.Suspend;

А чтобы возобновить работу потока:
MyThread.Resume;
Добавлено: 05 Сентября 2013 12:49:30 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...