Скачать презентацию Методы и свойства потока кода Музыченко В Скачать презентацию Методы и свойства потока кода Музыченко В

Методы и свойства потока кода.pptx

  • Количество слайдов: 11

Методы и свойства потока кода Музыченко В. , 38 гр. Методы и свойства потока кода Музыченко В. , 38 гр.

Поток кода Потоки в Delphi выполняют функцию имитации псевдопараллельной работы приложения. Как известно, для Поток кода Потоки в Delphi выполняют функцию имитации псевдопараллельной работы приложения. Как известно, для организации многозадачности операционная система выделяет каждому приложению, выполняющемуся в настоящий момент, определённые кванты времени, длина и количество которых определяется его приоритетом. Поэтому объём работы, который приложение может выполнить, определяется тем, сколько таких квантов оно сможет получить в единицу времени. Для операционной системы каждый поток является самостоятельной задачей, которой выделяются кванты времени на общих основаниях. Поэтому приложение Delphi, умеющеесоздать несколько потоков, получит больше времени операционной системы, и соответственно сможет выполнить больший объём работы.

TThread Создать дополнительный поток в Delphi поможет объект TThread. Ввести объект TThread в программу TThread Создать дополнительный поток в Delphi поможет объект TThread. Ввести объект TThread в программу можно двумя способами: с помощью Мастера; вручную.

С помощью Мастера 1. Мастер создания дополнительного потока в Delphi создаёт отдельный модуль, в С помощью Мастера 1. Мастер создания дополнительного потока в Delphi создаёт отдельный модуль, в рамках которого выполняется поток. Выполним: File -> New -> Other. . . В появившейся табличке выбора найдём TThread Object. Появится окошко, в верхнюю строку которого (Class Name) введём имя нашего будущего потока: My. Thread. В результате будет создан модуль, содержащий заготовку кода, реализующего дополнительный поток Delphi

unit Unit 2; // Имя модуля, содержащего поток. При сохранении его можно изменить. interface unit Unit 2; // Имя модуля, содержащего поток. При сохранении его можно изменить. interface uses Classes; type My. Thread = class(TThread) //My. Thread - заданное нами имя потока. private { Private declarations } protected procedure Execute; override; end; implementation { Important: Methods and properties of objects in visual components can only be used in a method called using Synchronize, for example,

Synchronize(Update. Caption); and Update. Caption could look like, procedure My. Thread. Update. Caption; begin Synchronize(Update. Caption); and Update. Caption could look like, procedure My. Thread. Update. Caption; begin Form 1. Caption : = 'Updated in a thread'; end; } { My. Thread } procedure My. Thread. Execute; begin { Place thread code here } end; end.

Вручную В первом способе класс My. Thread был создан мастером в дополнительном модуле. Второй Вручную В первом способе класс My. Thread был создан мастером в дополнительном модуле. Второй способ состоит в том, что мы сами создаём такой класс в рамках одного из уже существующих модулей программы, например, в модуле Unit 1: unit Unit 1; //Обычный модуль в котором описывается основная программа interface uses Windows, Messages, Sys. Utils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Std. Ctrls;

type TForm 1 = class(TForm) Button 1: TButton; procedure Button 1 Click(Sender: TObject); private type TForm 1 = class(TForm) Button 1: TButton; procedure Button 1 Click(Sender: TObject); private { Private declarations } public { Public declarations } end; //Здесь необходимо описать класс TMy. Thread: TMy. Thread = class(TThread) private { Private declarations } protected procedure Execute; override; end; var Form 1: TForm 1; //Нужно ввести переменную класса TMy. Thread My. Thread: TMy. Thread; implementation {$R *. dfm} //Нужно создать процедуру Execute, уже описанную в классе TMy. Thread procedure TMy. Thread. Execute; begin Здесь описывается код, который будет выполняться в потоке end;

При работе с потоками необходимо учитывать приоритет создаваемых потоков. Так, если в предыдущем примере При работе с потоками необходимо учитывать приоритет создаваемых потоков. Так, если в предыдущем примере запустить не один поток, а два или больше, то компьютер станет очень заметно "тормозить". Это происходит потому что приоритет по умолчанию новых потоков - нормальный. Можно уменьшить его, задав My. Thread. Priority: =tp. Lower; Этого достаточно, чтобы компьютер чувствовал себя более свободно.

Таблица приоритетов: - tp. Idle Низший приоритет. Поток получает время только тогда, когда операционая Таблица приоритетов: - tp. Idle Низший приоритет. Поток получает время только тогда, когда операционая система находится в состоянии простоя. - tp. Lowest Приоритет на два пункта ниже нормального - tp. Lower Приоритет на один пункт ниже нормального - tp. Normal Нормальный приоритет - tp. Higher Приоритет на один пункт выше нормального - tp. Highest Приоритет на два пункта выше нормального - tp. Time. Critical Максимальный приоритет. Приоритет на уровне функций ядра операционной системы.

Краткое описание класса TThread Свойства Free. On. Terminate - освобождать ли память, выделенную под Краткое описание класса TThread Свойства Free. On. Terminate - освобождать ли память, выделенную под экземпляр класса процесса, когда этот процесс завершается. Если True - при завершении процесса (или при вызове метода Terminate) экземпляр класса автоматически освобождается (аналогично вызову метода Free). Тип: Boolean; Handle (Thread. ID) - дескриптор процесса. Эта величина может быть использована для управления процессом через функции Win. API. Тип: THandle; Return. Value - возвращаемое значение при завершении процесса. Тип: Integer; Priority - приоритет процесса. Возможные значения этого свойства мы разберем немного позже. Тип: TThread. Priority; Suspended - показывает, в каком состоянии находится процесс: True - приостановлен, False - в нормальном. Тип: Boolean; Terminated - показывает, завершен ли процесс. True - завершен, False - нет. Тип: Boolean; Методы Create(Create. Suspended: Boolean) - создает экземпляр класса. Параметр. Create. Suspended указывает на то, нужно ли создавать приостановленную задачу (True), или запускать ее сразу (False); Suspend - приостанавливает выполнение процесса; Resume - продолжает выполнение процесса после Suspend; Terminate - полностью прекращает выполнение процесса; Wait. For - ждет завершения процесса, возвращая затем код его завершения (Return. Value); Synchronize(Method: TThread. Method) - синхронизирует выполнение метода процесса, позволяя ему работать параллельно с другими процессами.