Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_Delphi_2.doc
Скачиваний:
12
Добавлен:
18.09.2019
Размер:
1.91 Mб
Скачать

Implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Edit1.Text:=IntToStr(Thread1.Count);

Edit2.Text:=IntToStr(Thread2.Count);

Thread1.Count:=0;

Thread2.Count:=0;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Thread1:=TSimpleThread.Create( False );

Thread1.Priority:=tpLowest;

Thread2:=TSimpleThread.Create( False );

Thread2.Priority:=tpLowest;

end;

procedure TForm1.TrackBar1Change(Sender: TObject);

var

I:Integer;

Priority: TThreadPriority;

begin

Priority := tpLowest;

for I:=0 to (Sender as TTrackBar).Position-1 do inc(Priority);

If Sender=TrackBar1

then Thread1.Priority:=Priority

else Thread2.Priority:=Priority;

end;

end.

На рис. 20 .6 показана форма приложения при исполнении программы. На каждом интервале таймера содержимое полей текста редакторов Edit1 и Edit2 меняется. По ним можно судить о скорости работы нитей. Скорость можно менять, изменяя приоритеты нитей. Скорости примерно одинаковы при равных приоритетах. Если это не так, то быстрее выполняется процесс с большим приоритетом.

рис. 20.6. Форма задания 2 при исполнении программы

Задание 3

Добавить в программу задания 2 средства останова, возобновления и переключения потоков. Проект – приложение. Для управления потоками с взаимодействием создаем приложение, форма которого представлена на рис. 20 .7. Файлы проекта будем сохранять в папке 20_3.

рис. 20.7. Форма задания 3 на этапе конструирования

Для формы определим надпись «Взаимодействие потоков». Использованы дополнительные компоненты:

  • Кнопки Button c надписями «Стоп» и «Пуск» для каждого потока.

  • Кнопка Button с надписью «Переключить».

Кнопки «Стоп1» и «Стоп2» приостанавливают потоки путем использования метода Suspend, а кнопки «Пуск1» и «Пуск2» их возобновляют методом Resume. Кнопка «Переключить» в случае работы только одного потока меняет сосотояние потоков на противоположное.

В модуле формы дополнительно определены процедуры:

  1. procedure Button1Click(Sender: TObject). Она при нажатии кнопки «Стоп1» останавливает поток 1.

  2. procedure Button2Click(Sender: TObject). Она при нажатии кнопки «Пуск1» возобновляет поток 1.

  3. procedure Button3Click(Sender: TObject). Она при нажатии кнопки «Стоп2» останавливает поток 1.

  4. procedure Button4Click(Sender: TObject). Она при нажатии кнопки «Пуск2» возобновляет поток 1.

  5. procedure Button5Click(Sender: TObject). Она при нажатии кнопки «Переключение» меняет на противоположные состояния потоков.

Листинг модуля формы:

unit Prg_20_3_;

Interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, ExtCtrls, MyThread;

type

TForm1=class(TForm)

Edit1:TEdit;

Edit2:TEdit;

Timer1:TTimer;

Label1:TLabel;

Label2:TLabel;

TrackBar1:TTrackBar;

TrackBar2:TTrackBar;

Label3:TLabel;

Label4:TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

procedure Timer1Timer(Sender:TObject);

procedure FormCreate(Sender:TObject);

procedure TrackBar1Change(Sender:TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

Thread1,Thread2:TSimpleThread;

end;

var

Form1: TForm1;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]