Svoystva_i_metody_potoka_koda.pptx
- Количество слайдов: 16
СВОЙСТВА И МЕТОДЫ ПОТОКА КОДА Калинина Ю.
Параллельный поток, или просто поток - объект, выполняемый параллельно с основным потоком приложения и с другими параллельными потоками. Термин "параллельность" рассматривается в контексте вытесняющей многозадачности операционной системы - то есть, операционная система выделяет потоку некоторый квант времени, а затем переключается на другой поток. Реализация параллельных потоков опирается на возможность, предоставляемую операционной системой - "thread".
Современные операционные системы Windows обеспечивают не только многозадачность, т. е. возможность параллельной работы нескольких программ, но и многопоточность, когда в рамках одной программы организуется несколько параллельно выполняемых фрагментов (потоков), каждый из которых конкурирует с другими потоками за наиболее важный ресурс - время центрального процессора. В многопоточном режиме время ЦП выделяется для каждого процесса небольшими порциями (квантами), по истечении этого времени управление передается другому потоку и т. д. до тех пор, пока потоки не закончат свою работу. В любой работающей программе организуется как минимум один поток для команд программы. С помощью объектов класса TThread программа может создать дополнительные потоки для проведения некоторой фоновой работы (например, текстовый процессор Word создает дополнительные потоки для проверки правильности орфографии, разбивки на страницы, печати документа и т. п. ).
Одной из отличительных черт класса TThread является гарантия безопасной работы с библиотекой визуальных компонентов VCL. Без использования класса TThread во время вызовов VCL могут возникнуть ситуации, требующие специальной синхронизации. Нужно отдавать себе отчет, что с точки зрения операционной системы поток — это ее объект. При создании он получает дескриптор и отслеживается ОС. Объект класса TThread — это конструкция Delphi, соответствующая потоку ОС. Этот объект VCL создается до реального возникновения потока в системе и уничтожается после его исчезновения.
Создание потока Для создания потока необходимо выполнить следующие действия: создать новый проект, разместить на форме все необходимые компоненты и добавить требуемый код; выполнить тему меню File/New/Thread Object, задать имя класса поток. После выполнения этих действий Delphi создаст новый модуль-шаблон для потока; сохранить этот модуль под требуемым именем в папке проекта; новый модуль добавить в предложение uses там, гже это необходимо; добавить в модуль (потока) требуемый код.
В сгенерированном Delphi модуле-заготовке присутствует описание класса TThread с одним единственным методом Execute. unit Unit 1; interface uses Classes; type My. Thread = class(TThread) private { Private declarations } protected procedure Execute; override; end; implementation (My. Thread} procedure My. Thread. Execute; begin { Пожалуйста, поместите код потока в этом месте } end; end. С этого метода, который нет необходимости вызывать "напрямую", начинается выполнения потока. Но еще раньше поток необходимо создать с помощью конструктора Create.
Программирование потока ничем не отличается от программирования обычной программы за одним важным исключением: поток не должен использовать методы и свойства визуальных компонентов, которые приводят к изменению внешнего вида программа Точнее, он может это делать только при обращении к специальному методу Synchronize, с помощью которого осуществляется синхронизация исполнения главного потока программы с дополнительным потоком.
Методы потока кода Класс TThread является производным от класса TObject и включает 9 методов, приведенных в таблице:
Если в потоке будет выполняться какой-то цикл, и поток должен завершиться вместе с приложением, то условия окончания цикла должны быть примерно такими: procedure TMy. Thread. Execute; begin repeat Do. Something; Until Cancel. Condition or Terminated; end; Здесь Cancel. Condition — ваше личное условие завершения потока (исчерпание данных, окончание вычислений, поступление на вход того или иного символа и т. п. ), а свойство Terminated сообщает о завершении потока (это свойство может быть установлено как изнутри потока, так и извне; скорее всего, завершается породивший его процесс).
Конструктор объекта: constructor Create(Create. Suspended: Boolean); получает параметр Create. Suspended. Если его значение равно True, вновь созданный поток не начинает выполняться до тех пор, пока не будет сделан вызов метода Resume. В случае, если параметр Create. Suspended имеет значение False, конструктор завершается и только затем поток начинает исполнение.
destructor Destroy; override; Деструктор Destroy вызывается, когда необходимость в созданном потоке отпадает. Деструктор завершает его и высвобождает все ресурсы, связанные с объектом TThread. function Terminate: Integer;
Для окончательного завершения потока (без последующего запуска) существует метод Terminate. Но если вы думаете, что этот метод делает какие-то принудительные действия по остановке потока, вы ошибаетесь. Все, что происходит, — это установка свойства property Terminated: Boolean; в значение True. Таким образом, Terminate — это указание потоку завершиться, выраженное "в мягкой форме", с возможностью корректно освободить ресурсы. Если вам нужно немедленно завершить поток, используйте функцию Windows API Terminate. Thread.
Свойства потока кода
Метод Synchronize гарантирует, что к любому объекту VCL одновременно получит доступ только один поток. Одновременный доступ к объекту VCL двух и более потоков может вызвать непредсказуемые последствия. Метод потока, который содержит обращение к какому-либо объекту VCL, не может иметь параметров и должен быть передан процедуре Synchronize в качестве параметра, например: Procedure Show. Number; Begin Edit 1. Text: =Int. To. Str(Number); End; … Synchronize(Show. Number);
Еще один способ синхронизации выполнения потоков можно реализовать с помощью функции Function Wait. For : integer; Например, при наличии потоков Thread 1 и Thread 2 выполнение в потоке Thread 1 оператора Code: =Thread 2. Wait. For приведет к приостановке выполнения потока Thread 1 до завершения потока Thread 2, а значение переменной Code будет установлено равным Thread 2. Return. Value.
Список использованной литературы Иан Грэхем Объектно-ориентированные методы. Принципы и практика = Object. Oriented Methods: Principles & Practice — 3 -е изд. — М. : «Вильямс» , 2004. — С. 880. 2. Антони Синтес Освой самостоятельно объектно-ориентированное программирование за 21 день = Sams Teach Yourself Object-Oriented Programming in 21 Days — М. : «Вильямс» , 2002. — С. 672. 1.