Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб3.Разработка многопоточных задач в среде....doc
Скачиваний:
3
Добавлен:
10.07.2019
Размер:
84.48 Кб
Скачать

Приоритеты потоков

Значение относительного приоритета

Приоритет

Числовое значение

TpIdle

Данный поток выполняется, когда система не занята и не выполняются никакие другие потоки. Windows не будет прекращать работу других потоков для выполнения потока, имеющего приоритет tpldle

-15

TpLowest

Низший приоритет выполнения. Данный поток занимает минимум процессорного времени

-2

ТрLower

Низкий приоритет. Данный поток занимает немного больше процессорного времени, чем имеющий приоритет tpLowest

-1

TpNormal

Нормальный приоритет. Все потоки по умолчанию имеют приоритет tpNormal

0

TpHigher

Высокий приоритет. Данный поток имеет приоритет выше нормального

1

TpHighest

Высший приоритет. Данный поток имеет приоритет выше, чем tpHigher

2

TpTimeCritical

Наивысший приоритет. Поток с данным приоритетом занимает максимум процессорного времени

15

  1. В блоке uses модуля Unit1 прописать используемые модули Unit2 и Unit3.

  2. Отразить результаты вычислений, производимых потоками, на форме. Для этого создать обработчик события OnTimer, дважды щелкнув на объекте Timer1.

procedure TForml.TimerlTimer(Sender: TObject); begin Editl.text:=IntToStr(Thread1.count); Progressbarl.position:=Thread2.prcount; end;

  1. Запустить приложение на выполнение.

  2. Исследовать работу программы при разных значениях приоритетов.

  3. Изменить программу: добавить возможность приостановки, возобновления и остановки процесса 1 (Thread1) .

  4. Для этого в основном модуле добавить в раздел public поле kluch типа boolean. Если kluch=True, то процесс 1 остановлен.

  5. В процедуре TForm1.FormCreate ввести строку

kluch:=false;

  1. Добавить на форму три кнопки Button с именами :

Поток 1 приостановлен

Поток 1 восстановлен

Поток 1 остановлен

и метку Label1 для отображения состояния потока 1.

  1. В главной программе написать обработчики событий нажатия этих кнопок:

procedure TForm1.Button1Click(Sender: TObject);

begin

if (not Thread1.Suspended and not kluch) then

begin

Thread1.Suspend; // приостановка потока 1

Label1.Caption:=’ Поток 1 приостановлен ‘;

end

else if kluch then Label1.Caption:='Поток 1 нельзя приосстановить'

else Label1.Caption:='Поток 1 уже приостановлен’;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if (Thread1.Suspended and not kluch) then

begin

Thread1.Resume; // возобнавление потока

Label1.Caption:= ’ Поток 2 восстановлен ‘;

end

else if kluch then Label1.Caption:='Поток 1 нельзя восстановить'

else Label1.Caption:='Поток 1 уже востановлен’;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if not kluch then

begin

Thread1.Terminate; // остановка потока и присвоение своству Terminated

// значения True.

Thread1.Free; // удаление экземпляра класса

kluch:=true; // флаг сигнализирует об удалении потока 1

Label1.Caption:= ’ Поток 1 остановлен ‘;

end

else Label1.Caption:='Поток 1 уже был остановлен';

end;

  1. В модуле Unit2 изменить процедуру Execute

procedure TMyThreadl.Execute; begin while not Terminated do // пока поток 1 не остановлен begin count:=random(maxint); end; end;

21. Сохранить модули, запустить программу на выполнение.