Многопоточность Delphi [1]. Введение

_______Определение_________

Многопоточность - это свойство платформы (Windows, Linux и т.д.), заключающееся в том, что процесс, запущенный в операционной системе может состоять из потоков (под-процессов, если очень грубо). Подробнее. Один процесс (в данном случае наша программа) может содержать внутри себя несколько потоков, которые будут использовать ресурсы PC, например память. Очень хорошая аналогия показана на Wikipedi'и - "В качестве аналогии потоки выполнения процесса можно уподобить нескольким вместе работающим поварам. Все они готовят одно блюдо, читают одну и ту же кулинарную книгу с одним и тем же рецептом и следуют его указаниям, причём не обязательно все они читают на одной и той же странице."
К примеру Microsoft Office Word: печатая текст, у нас мгновенно появляется проверка на орфографию - неверные слова подчёркиваются курсивом. Орфография выполняется как раз во втором потоке, а процесс считывания данных с клавиатуры (набор текста нами) в первом. Это позволяет оптимизировать скорость программы, разграничить и оптимально использовать ресурсы PC.

Важно понимать, что каждый новый поток в программе - наследник класса TThread, и представляет собой отдельный блок, в котором помимо стандартных процедур мы задаём свой код выполнения. Соответственно каждый новый поток - это определённый вес программе, как в плане физическом, так и для оперативной памяти (если поток несёт в себе какую-либо функцию). Так что создавая поток, важно подумать, нужен ли он программе и будет ли он ей полезен.
Проверить работу без многопоточности достаточно просто, например задать программе выполнение цикла и одновременно форматирование текста. А после передвинуть форму. Наверняка программа зависнет, так как в один поток (основной) было заложено слишком много действий, а выполнение команд в одном потоке задано последовательно.

_______Задание потоков_________

Потоки в Delphi возможно задавать двумя способами - через мастер и вручную. Рассмотрим задание потока через мастер:
1) Files -> New -> Other...:



2) В открывшемся диалоге "New Items" выбираем Delphi Files -> Thread Object -> Ok:



3) Вводим имя потока - > Ok:



4) Появляется модуль-заготовка потока:



5) Profit!

Таким образом. Теперь рассмотрим задание потока вручную:
В Основном блоке (unit) прописываем новую секцию Type:

type
  TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end; 


Далее ставим курсор на описание процедуры Execute, нажимаем Ctrl+Shift+C и процедура создаётся:



+
CTRL+SHIFT+C
=



Profit.

Таким образом научились задавать потоки двумя способами. Я рекомендую делать это вручную, дабы не плодить лишние визуальные блоки.
В процедуре Execute прописываем код выполнения для потока. Основные методы:

Create (false/true) //Создание потока. При параметре false поток начнёт свою работу сразу же после его создания. При true - после вызова метода Resume;
Priority //Уровень приоритета потока;


Уровни приоритета:

tpIdle
tpLowest
tpLower
tpNormal
tpHigher
tpHighest
tpTimeCritical

tpIdle - является самым низким уровнем приоритета, а tpTimeCritical является самым высоким уровнем приоритета.
Для уничтожения потока из памяти существует метод

Terminate;


Для приостановления потока на некоторое время -

Suspend;


Для возобновления работы -

Resume;


На этом знакомство с потоками завершаем.
Теги:
может, выполняется, процесс, подчёркиваются, курсивом, Орфография, потоке, втором, слова, мгновенно, текст, появляется, проверка, неверные, орфографию, считывания, клавиатуры, разграничить, программы, оптимально
Добавлено: 24 Февраля 2015 21:48:16 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...