Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по лабораторным работам.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
398 Кб
Скачать
☆

Результат работы программы:

Ответы на контрольные вопросы:

1.Для чего предназначена функция CreateProcess()? Перечислите параметры функции, значения которых нельзя определить “по умолчанию”.

Функция CreateProcess() предназначена для запуска 32-разрядных приложений.

Параметры функции, значения которых нельзя определить “по умолчанию”: lpCommandLine, bInheritHandles, dwCreationFlags, lpCurrentDirectory, lpStartupInfo, lpProcessInformation.

2.Опишите два возможных варианта использования параметров lpApplicationName и lpCommandLine для функции CreateProcess().

lpApplicationName – ‘Regedit.exe’

lpCommandLine – ‘Редактор реестра’

3.Что определяет структура типа STARTUPINFO?

Структура типа STARTUPINFO определяет внешний вид окна создаваемого процесса.

Вывод: при выполнении данной лабораторной работы я освоил подготовку, создание и управление процессами в среде ОС Windows. Создание процесса осуществляется с помощью функции CreateProcess().

Выполнил…………………………………………………………....Погодаев А.М.

Преподаватель………………………………………………………...Мохов В.А.

Лабораторная работа № 3

Создание, запуск и управление нитями в многозадачной ОС.

Цель: освоить технологию подготовки, создания и управления нитями в среде OC Windows.

Оборудование: ПЭВМ IBM PC-AT 486 и выше.

Программные средства: ОС Windows XP, C++ Builder 6, файл справочной документации по функциям API библиотеки WIN32 (Win32.hlp).

Задание:

Подготовить программу, которая сможет создавать и запускать для одновременного выполнения несколько нитей с различными приоритетами в рамках одного процесса OC Windows.

Программа работы:

  1. Ознакомиться с общей технологией использования нитей в ОС Windows.

  2. Ознакомиться со структурой объектного типа TThread.

  3. Ознакомиться с системой приоритетов для нитей.

  4. Спланировать общий алгоритм управления нитями и подготовить алгоритм, выполняемый каждой из них.

  5. Подготовить в соответствии с заданием и алгоритмами для нитей программу.

  6. Выявить и исправить ошибки, создать удобный интерфейс, расставить по тексту программы комментарии.

  7. Провести испытания и продемонстрировать работу программы преподавателю.

Листинг заголовочного файла программы:

unit Unit1;

interface

uses

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

Dialogs, OleServer, {OutlookXP,} Gauges, StdCtrls, ExtCtrls, Menus,

Buttons;

type

TForm1 = class(TForm)

Gauge1: TGauge;

Timer1: TTimer;

Gauge2: TGauge;

Gauge3: TGauge;

Gauge4: TGauge;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Image1: TImage;

procedure Button1Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

TThread1 = class(TThread)

private

{ Private declarations }

protected

P: integer;

procedure Execute; override;

procedure UpdateGauge1;

end;

type

TThread2 = class(TThread)

private

{ Private declarations }

protected

P: integer;

procedure Execute; override;

procedure UpdateGauge2;

end;

type

TThread3 = class(TThread)

private

{ Private declarations }

protected

P: integer;

procedure Execute; override;

procedure UpdateGauge3;

end;

type

TThread4 = class(TThread)

private

{ Private declarations }

protected

P: integer;

procedure Execute; override;

procedure UpdateGauge4;

end;

var

Form1: TForm1;

TFun1: TThread1;

TFun2: TThread2;

TFun3: TThread3;

TFun4: TThread4;

i: integer;

implementation

{$R *.dfm}

Procedure TThread1.Execute;

var

k: integer;

begin

repeat

Synchronize(UpdateGauge1);

for k:=0 to 100 do

begin

P:=k;

Synchronize(UpdateGauge1);

end;

until False

end;

procedure TThread1.UpdateGauge1;

begin

Form1.Gauge1.Progress:=P;

end;

Procedure TThread2.Execute;

var

k: integer;

begin

repeat

Synchronize(UpdateGauge2);

for k:=0 to 100 do

begin

P:=k;

Synchronize(UpdateGauge2);

end;

until False

end;

procedure TThread2.UpdateGauge2;

begin

Form1.Gauge2.Progress:=P;

end;

Procedure TThread3.Execute;

var

k: integer;

begin

repeat

Synchronize(UpdateGauge3);

for k:=0 to 100 do

begin

P:=k;

Synchronize(UpdateGauge3);

end;

until False

end;

procedure TThread3.UpdateGauge3;

begin

Form1.Gauge3.Progress:=P;

end;

Procedure TThread4.Execute;

var

k: integer;

begin

repeat

Synchronize(UpdateGauge4);

for k:=0 to 100 do

begin

P:=k;

Synchronize(UpdateGauge4);

end;

until False

end;

procedure TThread4.UpdateGauge4;

begin

Form1.Gauge4.Progress:=P;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

TFun1:= TThread1.Create(False);

TFun1.Priority:=tpIdle;

TFun2:= TThread2.Create(False);

TFun2.Priority:=tpLowest;

TFun3:= TThread3.Create(False);

TFun3.Priority:=tpLower;

TFun4:= TThread4.Create(False);

TFun4.Priority:=tpNormal;

end;

procedure TForm1.N1Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

TFun1:= TThread1.Create(False);

TFun1.Priority:=tpIdle;

TFun2:= TThread2.Create(False);

TFun2.Priority:=tpLowest;

TFun3:= TThread3.Create(False);

TFun3.Priority:=tpLower;

TFun4:= TThread4.Create(False);

TFun4.Priority:=tpNormal;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

close;

end;

end.