
- •12.Списки
- •Interface
- •Implementation
- •13.Модули
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •14.Таблицы
- •Interface
- •Implementation
- •15.Графика, отображение графиков функций
- •Interface
- •Implementation
- •Initialization
- •16.Графика, примитивы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Initialization
- •17.Графика, растровые изображения и анимация
- •Interface
- •Implementation
- •Initialization
- •Interface
- •Implementation
- •18.Тестирование и отладка
- •19.Квадратное уравнение
- •Interface
- •20.Класс tThread
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •21.Класс tStream
- •Interface
- •Implementation
- •Initialization
- •Interface
- •Implementation
- •Initialization
- •22.Создание в Delphi кроссплатформенного приложения
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
I
Mplementation
{$R *.DFM}
// обработчик события OnCliсk для кнопки "Вычислить"
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c:real; // коэффициенты уравнения
d:real; // дискриминант
x1,x2:real; // корни уравнения
code:integer; // для преобразования текста в число
st1,st2:string[10];
begin // ввод исходных данных из полей редактирования
val(Edit1.text,a,code); // преобразование текста в число
val(Edit2.text,b,code);
val(Edit3.text,c,code);
if a=0
then Label1.caption:='Коэффициенты при второй степени'
+chr(13)+'неизвестного равен нулю!';
else
begin // решение уравнения
d:=b*b-4*a*c;
if d<0
then Label1.caption:='Дискриминант < 0' +chr(13)+'Уравнение не имеет корней'
else
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
str(x1:10:5,st1);
str(x2:10:5,st2);
Label1.Caption:='Корни уравнения:'+ chr(13)+'x1='+st1+ chr(13)+'x2='+st2;
end;
end;
end;
// обработчик событий OnClik для кнопки "Новое"
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Label1.Caption:='';
Edit1.SetFocus;
end;
// обработчик событий OnClik для кнопки "Завершить"
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.
На рис. 19 .3 приведен вид окна работающего приложения после ввода коэффициентов и вычислений.
рис. 19.3.Форма приложения при исполнении
Выводы
Для управления используются компоненты Button (кнопка) и их обработчики событий.
Для пояснений используются компоненты Label (метка).
Для ввода данных используются компоненты Edit (однострочный редактор).
Кнопка “Выход” дублирует стандартную кнопку завершения приложения Windows.
20.Класс tThread
Подготовка к работе
По рекомендованной литературе изучить:
назначение объектов класса TThread;
свойства и методы объектов класса TThread;
синхронизация объектов класса TThread.
Разработать алгоритмы и программырешения в соответствии с указанными заданиями.
Контрольные вопросы
Определение Процесса и Нити (Thread).
Основная и порождаемые нити.
Способы взаимодействия порождаемых нитей с основной нитью и между собой.
Приоритет нити и ограничение на использование высокоприоритетных потоков.
Метод Create создания нити.
Метод Execute запуска нити. Почему он должен быть переопределяемым
Для чего нужна синхронизация параллельно выполняющихся нитей. Метод Syncronize.
Метод Suspend приостанова выполнения нити.
Метод Resume возобновления выполнения нити.
Метод Terminate завершения выполнения нити.
Использование объекта типа события (Event) для синхронизации нитей.
Методы SetEvent и ResetEvent для перевода объекта в активное или пассивное состояния.
Метод WaitFor ожидания активизации события в течение заданного времени.
Методы Get и Release для получения объекта или освобождения от него.
Задания к работе
Создать модуль класса потоков.
Создать программу, использующую два параллельных потока с изменяемыми приоритетами. Проект – приложение.
Добавить в программу задания 2 средства останова, возобновления и переключения потоков. Проект – приложение.
Пример выполнения
Задание 1.
Создаем модуль класса потока TMyThread, являющегося наследником класса. Для этого выполним следующие операции:
В ИСР выполняем команду File=>New=>Unit (Файл=>Создать=>Модуль). На рис. 20 .4показана заготовка модуля. Сохраним его с именем MyThread в папке проекта 20_1. При этом имя модуля сменится в окне кода автоматически.
рис. 20.4. Заготовка модуля
Занесем в модуль текст кода, приведенный ниже. Процесс, выполняемый в потоке, оформляем, как подпрограмму с именем Execute. Это циклически повторяемые вычисления со счетчиком циклов Count.
Листинг модуля MyThread
unit MyThread;