Демонстрационное многопоточное приложение с динамическим изменением свойств окна и компонент
Разработка и реализация демонстрационного многопоточного приложения. Выбор основных средств реализации. Описание логики работы приложения и разработка программного обеспечения. Описание пользовательского интерфейса. Реализация потоков в Delphi.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.08.2014 |
Размер файла | 462,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Реализация потоков в Delphi
1.1 Потоки в Delphi
1.2 Класс TThread
2. Разработка демонстрационного многопоточного приложения
2.1 Постановка задачи
2.2 Выбор средств реализации
2.3 Описание логики работы приложения и разработка программного обеспечения
2.4 Описание пользовательского интерфейса
Заключение
Список использованной литературы
Приложение А (обязательное)
Введение
Информатика - это область человеческой деятельности, связанная с процессами преобразования информации с помощью компьютеров и их взаимодействием со средой применения. Информатика появилась благодаря развитию компьютерной техники и немыслима без нее.
Одним из важнейших разделов информатики является программирование. Язык программирования - это формальный, искусственно созданный язык для написания и реализации алгоритма на компьютере.
Среди главных причин, принесших заслуженную популярность объектно-ориентированного программирования, следует отметить следующие:
· почти полное разрешение проблемы кризиса в программном обеспечении, за счет уменьшения времени на разработку программного продукта и высокой технологии программирования;
· переход от существующих языков программирования к новым, прогрессивным информационным технологиям и сходство идей объектно-ориентированного программирования с идеями из других областей науки.
Методы ООП для решения технических задач нередко используются в повседневной жизни, поэтому, обучение языкам объектно-ориентированного программирования не вызывает особых трудностей.
Преимущество ООП в наглядном представлении программы с помощью объектов (кнопок, строк для ввода информации и др.). Каждый объект принадлежит определенному классу. Например, кнопка (Button1) принадлежит классу кнопок TButton. В класс входит сколь угодно много объектов, объединенных в одну группу согласно их свойствам и поведению в среде окружения, в которой они существуют и взаимодействуют.
Появление Delphi не могло пройти незамеченным среди многочисленных пользователей компьютера. Оценки экспертов, изучающих возможности этого нового продукта фирмы Borland, обычно окрашены в восторженные тона. Основное достоинство Delphi состоит в том, что здесь реализованы идеи визуального программирования. Среда визуального программирования превращает процесс создания программы в приятное и легко понимаемое конструирование приложения из большого набора графических и структурных примитивов.
В данном курсовом проекте к рассмотрению предоставлены следующие вопросы:
· Потоки в Delphi.
· Класс TThread.
Практической частью курсового проекта является разработка демонстрационного многопоточного приложения с динамическим изменением свойств окна и компонент.
1. Реализация потоков в Delphi
1.1 Потоки в Delphi
Работая с Delphi, нужно иметь в виду: этот замечательный продукт не только упрощает разработку сложных приложений, он использует при этом все возможности операционной системы. Одна из возможностей, которую поддерживает Delphi, -- это так называемые потоки (threads) или нити.
Потоки позволяют в рамках одной программы решать несколько задач одновременно. С недавних пор операционные системы для персональных компьютеров сделали это возможным.
Операционная система (ОС) предоставляет приложению некоторый интервал времени центрального процессора (ЦП) и в момент, когда приложение переходит к ожиданию сообщений или освобождает процессор, операционная система передает управление другой задаче. Теперь, когда компьютеры с более чем одним процессором резко упали в цене, а операционная система Windows NT может использовать наличие нескольких процессоров, пользователи действительно могут запускать одновременно более одной задачи. Планируя время центрального процессора, Windows 95 или Windows NT распределяют его между потоками, а не между приложениями. Чтобы использовать все преимущества, обеспечиваемые несколькими процессорами в современных операционных системах, программист должен знать, как создавать потоки.
Потоки -- это объекты, получающие время процессора. Время процессора выделяется квантами. Квант времени -- это интервал, имеющийся в распоряжении потока до тех пор. пока время не будет передано в распоряжение другого потока.
1.2 Класс Tthread
Delphi представляет программисту полный доступ к возможностям программирования интерфейса Win32.
Класс TThread -- прекрасный пример предоставления разработчику простого доступа к программированию потоков.
Зачем же нужен класс Thread и его потомки? Во-первых, этот объект позволяет создавать как бы несколько программ в одной (несколько процессов, или, потоков). Во-вторых, эти процессы могут выполняться как по очереди, так и одновременно (как запрограммирует разработчик). В-третьих, из этих процессов можно легко получить доступ ко всем глобальным данным программы, т.к. класс процесса является, по сути, просто частью программы - обычным юнитом (unit). В-четвертых, можно создать своих собственных потомков TThread и запустить сразу несколько экземпляров одного и того же созданного класса. В-пятых, каждым процессом очень легко управлять - запускать, завершать, приостанавливать, прерывать, устанавливать приоритетность, и т.д.
Сам API потоков не очень сложен, но предоставленные классом TThread возможности вообще замечательно просты. Все, что необходимо сделать, -- это перекрыть виртуальный метод Execute.
Другая отличительная черта класса TThread -- это гарантия безопасной работы с библиотекой визуальных компонентов VCL. Без использования класса TThread во время вызовов VCL могут возникнуть ситуации, требующие специальной синхронизации.
С точки зрения операционной системы поток -- это ее объект. При создании он получает дескриптор и отслеживается ОС. Объект класса TThread -- это конструкция Delphi, соответствующая потоку ОС. Этот объект VCL создается до реального возникновения потока в системе и уничтожается после его исчезновения.
2. Разработка демонстрационного многопоточного приложения
2.1 Постановка задачи
Разработка демонстрационного многопоточного приложения с динамическим изменением свойств окна и компонент.
Основные требования: Наличие кнопок «Запуск потока», «Остановка потока», «Завершение потока» по нажатию на которые соответственно начинается, останавливается и завершается демонстрация работы потока. Запуск потока после его остановки должен выполняться с состояния, в котором поток был остановлен. После остановки потока обеспечить возможность сохранения данных в файле и загрузки их при следующем запуске программы.
Общие требования:
1. Для реализации многопоточного приложения использовать компонент TThread.
2. Тип приложения: GUI
2.2 Выбор средств реализации
Для выполнения проекта был выбран язык программирования Delphi, так как он сочетает в себе простоту выполнения задачи, построения пользовательского интерфейса, а также обладает мощным набором функций, экономящим время на разработку программного обеспечения.
Так же в проекте используется TThread-абстрактный класс для реализации потоков.
Свойства и методы класса TThread, используемые в данном проекте представлены в таблицах 1 и 2.
Таблица 1.
Свойства класса TТhread.
Свойство |
Описание |
|
property FreeOnTerminate: Boolean; |
Определяет, будет ли объект потока уничтожен автоматически при завершении потока. Если свойство равно True, то поток будет уничтожен автоматически при завершении, если свойство равно False, то поток должен уничтожаться явно в коде приложения. |
|
property Handle: THandle; |
Содержит дескриптор потока. Используется для управления потоком с помощью функций Windows API. |
|
property Priority: TThreadPriority; |
Определяет приоритет потока относительно других потоков в процессе. |
|
property ReturnValue: Integer; |
Определяет значение, возвращаемое потоком при его завершении. |
|
property Suspended: Boolean; |
Показывает, является ли поток приостановленным. Если установить свойство в True, то поток будет приостановлен, если установить свойство в False выполнение потока будет продолжено. |
|
property Terminated: Boolean; |
Показывает, был ли произведен вызов метода Terminate. |
|
property ThreadID: THandle; |
Идентифицирует поток в системе. |
Таблица 2.
Методы класса TТhread.
Метод |
Описание |
|
constructor Create(CreateSuspended: Boolean); |
Создает объект потока. Если параметр CreateSuspended равен False, то метод Execute будет вызван сразу. Если параметр CreateSuspended равен True, то метод Execute будет вызван только после вызова метода Resume. |
|
destructor Destroy; override; |
Уничтожает объект потока и освобождает память, выделенную для него. |
|
procedure DoTerminate; virtual; |
Вызывает событие OnTerminate. |
|
procedure Execute; virtual; abstract; |
Абстрактный метод, содержащий код, который будет выполняться при запуске потока. |
|
procedure Resume; |
Возобновляет выполнение приостановленного потока. |
|
procedure Suspend; |
Приостанавливает выполнение потока. |
|
procedure Synchronize(Method: TThreadMethod); |
Выполняет метод, вызванный в рамках главного VCL потока. |
|
procedure Terminate; |
Дает потоку сигнал на завершение, устанавливая свойство Terminated в значение True. |
|
function WaitFor: LongWord; |
Ожидает завершение потока и возвращает значение, определяемое свойством ReturnValue. |
2.3 Описание логики работы приложения и разработка программного обеспечения
демонстрационный многопоточный приложение delphi
В разрабатываемом приложении реализуется демонстрация работы многопоточного приложения на примере последовательного возрастания чисел от 1 до 20.
Пользователь имеет возможность запуска потока, приостановки и возобновления потока, а также остановки запущенного потока с сохранением текущего состояния в файл и последующей загрузки и продолжения потока с сохраненного состояния.
В отдельном потоке происходит изменение чисел, путем последовательного возрастания от 1 до 20.
В файл сохраняется значение переменных потока в момент его остановки и сохранения. И извлекаются из него при загрузке сохраненного потока.
В соответствии с необходимыми требованиями для реализации многопоточного приложения был использован компонент TThread.
Приложение состоит из 3-х модулей (unit). Два из которых содержат формы и один(модуль) - поток TMyThread.
Листинг программы приведен в приложении А.
При разработке программного обеспечения были использованы следующие команды и действия:
· Создали поток класса TThread : TMyThread = class(TThread).
· Описали класс TThread: procedure TMyThread.Execute.
· Создали на форме поле Мemo, в котором будет отображаться поток.
· Для реализации запуска, приостановления и возобновления потока, а также остановки, сохранения и загрузки сохраненного потока реализовано следующее меню, состоящее из 5 основных кнопок:
- «Запуск» - запускает поток;
- «Пауза» - «Продолжить» - приостанавливает и возобновляет поток;
- «Остановка» - останавливает и сохраняет поток;
- «Сохранить» - сохраняет поток;
- «Загрузка» - загружает сохраненный поток.
Для того, чтобы пользователь не нажал кнопку в момент, когда она не может выполнить свое действие, кнопки делаются активными лишь когда их действие может быть выполнено без ошибок.
· Добавили модуль SyncObjs, в котором находятся классы для реализации синхронизации.
· Использовали класс Tcriticalsection. Этот класс позволяет нам выполнять только один поток. При использовании нескольких потоков он дает возможность завершиться первому потоку, после чего будет начат второй поток.
· Для того, чтобы сохранить данные с поля Мemo мы использовали строку Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName) + Save.txt'); где ExtractFilePath(Application.ExeName) - это путь к нашему проекту.
· Для удобства также были созданы еще 2 формы, в одной форме идет запрос на сохранение, а в другой - подробная информация о программе.
2.4 Описание пользовательского интерфейса
В интерфейсе проекта используются компоненты Delphi: Button, Memo, Label, SpinEdit.
Label - предназначен для отображения статического текста, то есть надписей и меток на Форме, которые не меняются в течение всего времени работы программы.
Memo - используется для ввода больших объёмов текста.
Button - используется для реализации в программе команд с помощью обработчика события OnClick этого компонента.
SpinEdit - представляет собой сочетание Edit и UpDown, оформленное как отдельный тип компонента.
При запуске проекта мы попадаем на следующую форму:
Рис.1. Запуск проекта.
Далее при нажатии на кнопку «Запуск» происходит запуск потока путем последовательного возрастания чисел от 1 до 20.
Рис.2. Запуск потока.
Запущенный поток можно приостановить, нажав на кнопку «Пауза», после чего кнопка «Пауза» меняется на кнопку «Продолжить», при нажатии на которую поток возобновляется.
Рис.3. Приостановка потока.
Рис.4. Возобновление потока.
Запущенный поток можно остановить и сохранить, нажав на кнопку «Остановка», после чего появляется окно о сохранении потока. При нажатии на кнопку «Да» поток сохраняется. Можно отказаться от сохранения потока, нажав на кнопку «Нет». Впоследствии остановленный поток возможно сохранить при нажатии на кнопку «Сохранить».
Рис.5. Остановка и сохранение потока.
Сохраненный поток возможно загрузить с состояния, с которого он был остановлен, и продолжить, нажав на кнопки «Загрузить» и «Запуск».
Рис.6. Загрузка сохраненного потока.
Рис.7. Продолжение потока с сохраненного состояния.
Так же в проекте есть дополнительная форма для вывода информация о проекте.
Рис.8. О программе.
Заключение
В процессе выполнения курсового проекта усвоили некоторые возможности Delphi.
Целью курсовой работы было изучение языка программирования DELPHI и разработка практических заданий.
При выполнении курсовой работы была изучена теория и технология работы со средой программирования Borland Delphi7 и TThread-абстрактный класс для реализации потоков.
В ходе курсовой работы было разработано приложение, позволяющее визуально увидеть принцип работы многопоточного приложения. Также была подробно рассмотрена реализация приложения.
Список использованной литературы
1. Архангельский А.Я. Программирование в Delphi: Учебник по классическим версиям Delphi. - М.: Бином, 2006.
2. Дмитрий Осипов. Delphi.Профессиональное програмирование.-2006
3. Фаронов В.В. Delphi. Программирование на языке высокого уровня: Учебник для вузов -- Спб.: Лидер, 2010.
4. Справочник Основы Delphi URL -- http://delphibasics.ru/
5. Множество форумов, посвященных программированию на Delphi.
6. Свободная интернет-энциклопедия Wikipedia. URL - http://ru.wikipedia.org/
Приложение А (обязательное)
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SyncObjs, Spin;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Button4: TButton;
Button6: TButton;
Button3: TButton;
SpinEdit1: TSpinEdit;
Button5: TButton;
Button7: TButton;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMyThread = class(TThread)
private
{ Private declarations }
public
{ Public declarations }
StringListCount:integer;
StringListLoads:TStringList;
procedure LoadFromFileMemo;
procedure Execute; override;
constructor Create(CreateSuspended: boolean);
end;
var
MyThread:TMyThread;
Form1: TForm1;
StopItSynchronize:Tcriticalsection;
iteri,g,delay:integer;
implementation
uses Unit2, Unit3;
{$R *.dfm}
constructor TMyThread.Create(CreateSuspended: boolean);
begin
inherited Create(CreateSuspended);
delay:=Form1.SpinEdit1.Value;
end;
procedure TMyThread.Execute;
begin
StopItSynchronize.Enter;
StringListLoads:=TStringList.Create;
StringListLoads.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Loading.txt');
for iteri:=g to StringListLoads.Count -1 do
begin
if self.Terminated then break;
sleep(delay);
StringListLoads[iteri];
StringListCount:=iteri;
Synchronize(LoadFromFileMemo);
end;
StopItSynchronize.Leave;
g:=0;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
StopItSynchronize:=Tcriticalsection.create;
end;
Procedure TMyThread.LoadFromFileMemo;
begin
Form1.Memo1.Lines.Add(StringListLoads[StringListCount]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyThread:=TMyThread.Create(true);
MyThread.FreeOnTerminate:=true;
MyThread.Resume;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Button2.Caption='Пауза' then begin
Button1.Enabled:=false;
Button3.Enabled:=false;
Button4.Enabled:=false;
Button6.Enabled:=false;
MyThread.Suspend;
Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName) + 'Save.txt');
Button2.Caption:='Продолжить';
exit;
end;
if Button2.Caption='Продолжить' then begin
MyThread.Resume;
Button2.Caption:='Пауза';
Button1.Enabled:=true;
Button3.Enabled:=true;
Button4.Enabled:=true;
Button6.Enabled:=true;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName) + 'Save.txt');
Button2.Caption:='Пауза';
MyThread.Terminate;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Save.txt');
g:=memo1.Lines.Count;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
MyThread.Terminate;
Form2.ShowModal;
Memo1.Clear;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
delay:=SpinEdit1.Value;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
MyThread.Terminate;
Form3.ShowModal;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName) + 'Save.txt');
Close;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
Close;
end;
end.
Размещено на Allbest.ru
Подобные документы
Разработка справочной системы по визуальным компонентам языка программирования Delphi. Возможность сохранения измененных свойств компонент в файле с возможностью их загрузки в будущем. Логика работы приложения и разработка программного обеспечения.
курсовая работа [602,4 K], добавлен 22.01.2015Область применения и требования создаваемого Web-приложения. Требования к техническому и программному обеспечению. Разработка структуры Web-приложения и выбор средств программной реализации. Программная реализация Web-приложения. Структура базы данных.
дипломная работа [1,4 M], добавлен 03.06.2014Разработка программы создания заметок в любом месте компьютера. Выбор технологии, языка и среды разработки приложения. Описание основных алгоритмов работы программного обеспечения. Проектирование пользовательского интерфейса. Выбор стратегии тестирования.
отчет по практике [700,5 K], добавлен 24.11.2014Разработка программного продукта - приложения, позволяющего заносить данные анкетирования в базу данных MS SQL. Описание логики работы приложения, особенности пользовательского интерфейса. Формы просмотра анкет, описание процедур и функций программы.
курсовая работа [1,2 M], добавлен 16.08.2012Разработка программного продукта для экспорта спецификации из приложения PartList. Выбор метода передачи информации в файл, формата для представления. Разработка конвертера, реализация пользовательского интерфейса. Обоснование актуальности разработки.
дипломная работа [2,6 M], добавлен 25.09.2014Обзор подходов к разработке музейных приложений с элементами дополненной реальности, формирование требований к ним. Выбор методов разработки приложения, разработка пользовательского интерфейса. Принципы тестирования. Реализация раздела "Распознавание".
дипломная работа [2,8 M], добавлен 03.07.2017Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Спецификация требований к разрабатываемому приложению. Разработка структурной схемы интерфейса. Описание алгоритма шифрования DES. Разработка программного кода приложения "DES". Проведение исследования основных шагов для генерации ключей и шифрования.
курсовая работа [398,4 K], добавлен 13.12.2022Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.
курсовая работа [167,8 K], добавлен 18.01.2017Технология разработки пользовательского интерфейса в среде Delphi. Создание таблицы, меню, форм для ввода и редактирования данных. Принципы организации меню как элемента интерфейса пользователя. Реализация сортировки, фильтрации, вычислений в таблице.
курсовая работа [1,6 M], добавлен 13.11.2012