Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Технология связывания и внедрения объектов (OLE)
Технология OLE (Object Linking and Embedding) реализуется компонентом OLE Container на панели System. Для вставки объекта выполняется команда контекстного меню Insert Object, которая выводит окно вставки объекта (рис. 4.6.1). Далее следует выбрать тип объекта. Рис. 4.6.1. Окна вставки нового и готового объекта из файла
Если объект создается из готового файла, то указывается имя этого файла, и флажок Link (cвязь) включает режим связывания (включается ссылка на файл) или внедрение объекта (включается содержимое файла). Двойной щелчок по объекту вызывает программу, создавшую этот объект, и становится возможным откорректировать вставленный объект. Многопоточные приложения В программе можно создать фрагменты (потоки), которые будут выполняться одновременно. Каждому потоку отводится системой Windоws квант времени на выполнение, по истечении которого осуществляется переход к следующему потоку и т.д. Это создает иллюзию одновременной работы нескольких потоков для однопроцессорного компьютера. Для многопроцессорного компьютера действительно можно распараллелить выполнение программы, что сокращает общее время ее выполнения. Покажем порядок создания потоков на следующем примере. Создадим новое приложение и разместим три области рисования (компонент PaintBox) размером 100 100 пикселей (для вывода разноцветных квадратов) и две кнопки для запуска потоков (Старт) и завершения выполнения приложения (Финиш) (рис 4.7.1). Командой File/New/Thread Object добавим потоковый объект с именем Potok. Появится модуль Unit2 c пустым описанием потомка класса TThread. Рис. 4.7.1. Окно выполнения приложения
Приведем текст приложения с комментариями (формируемые автоматически фразы в тексте выделим полужирным курсивом или многоточием). unit Unit1; //головной модуль Unit1 Interface Uses ..., unit2; //подключение модуля Unit2 Type TForm1 = class(TForm) ... Public procedure VivodFigur1; //объявление метода заполнения первой области procedure VivodFigur2; //объявление метода заполнения второй области procedure VivodFigur3; //объявление метода заполнения третьей области procedure VivodFigur(Vf:TCanvas);//объявление метода заполнения области ... Var Form1: TForm1; P1, P2, P3: potok; //объявление переменных для трех потоков
Implementation {$R *.DFM} procedure TForm1.Button1Click(Sender:TObject); //обработ. кнопки Старт Begin {Создание первого потока методом Create. Параметр True указывает, что запуск осуществляется после вызова метода Resume, иначе (False) ‑ сразу после создания потока.} p1:=potok.Create(true); //создание первого потока p1.Priority:=tpHighest; {установка приоритета выполнения потока: tpIdle (при простое Windows), tpLowest/tpLower или tpHighest/tpHigher (на два/один пункта ниже или выше нормального), tpNormal (нормальный), tpTimerCritical (наивысший) } p1.NPotoka:=1; //признак работы первого потока p2:=potok.Create(true); p2.NPotoka:=2; P2.Priority:=tpNormal; //второй поток p3:=potok.Create(true); p3.NPotoka:=3; P3.Priority:=tpLowest; //третий поток p1.Resume;p2.Resume;p3.Resume; //запуск 1, 2, 3 потоков end; procedure TForm1.VivodFigur(Vf:TCanvas);//вывод квадрата в области Vf Var f: Trect;//объявление переменной записи с описанием квадрата Begin Vf.Brush.Style:=bsSolid; //кисть рисует сплошную линию Vf.Brush.Color:=rgb(random(256),random(256),random(256)); //цвет кисти f.left:=random(90);f.top:=random(90);//координаты верхнего левого и f.right:=f.left+10; f.bottom:=f.top+10;//нижнего правого углов квадрата Vf.rectangle(f); //вывод квадрата в указанную параметром область end; //конец процедуры //процедуры вывода квадратов в 1, 2 и 3 области для рисования procedure TForm1.VivodFigur1; begin VivodFigur(Paintbox1.Canvas); end; procedure TForm1.VivodFigur2; begin VivodFigur(Paintbox2.Canvas); end; procedure TForm1.VivodFigur3; begin VivodFigur(Paintbox3.Canvas); end; procedure TForm1.Button2Click(Sender:TObject); //обработ. кнопки Финиш begin Application.Terminate; {завершение работы приложения} end; end. //конец модуля Unit1 unit Unit2; //модуль Unit2 с описанием потокового объекта Potok ... Type Potok = class(TThread) //объявление подкласса потока класса TThread ... Protected procedure Execute; override; //объявление метода выполнения потока public NPotoka: byte; //объявление переменной с номером потока end; Implementation uses unit1; //подключение модуля Unit1 ... procedure potok.Execute; //переопределение метода Execute begin {Метод Synchronize синхронизует работу всех потоков. Он имеет параметр ‑ имя метода (без параметров), выводящего квадрат в нужной области} while not Terminated do //Terminated=True после Application.Terminate case NPotoka of //анализ текущего номера потока 1: Synchronize(Form1.VivodFigur1); //выполнение первого потока 2: Synchronize(Form1.VivodFigur2); //выполнение второго потока 3: Synchronize(Form1.VivodFigur3); //выполнение третьего потока end; end;
end. //конец модуля Unit2
|
||||||||||||||||
Последнее изменение этой страницы: 2017-02-08; просмотров: 371; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.100.34 (0.008 с.) |