- •Передача данных между процессами посредством сообщений
- •Задание
- •Программа работы
- •Использованные компоненты и методы программы “Source”:
- •Листинг программы “Dest” – приёмник сообщений
- •If not r then ShowMessage('Ошибка передачи сообщения.');
- •Использованные компоненты и методы:
- •Результат работы программ
- •Листинг заголовочного файла программы:
- •Лабораторная работа №2 Создание, запуск и управление процессами в многозадачной ос.
- •Листинг исполняемого файла программы:
- •Результат работы программы:
- •Листинг заголовочного файла программы:
- •Листинг исполняемого файла программы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
- •Лабораторная работа № 4 Синхронизация задач с помощью событий.
- •Программа работы:
- •Листинг заголовочного файла программы “source”:
- •Листинг исполняемого файла программы “source”:
- •Листинг заголовочного файла программы “dest”:
- •Результат работы программы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
Результат работы программы:
Ответы на контрольные вопросы:
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.
Программа работы:
Ознакомиться с общей технологией использования нитей в ОС Windows.
Ознакомиться со структурой объектного типа TThread.
Ознакомиться с системой приоритетов для нитей.
Спланировать общий алгоритм управления нитями и подготовить алгоритм, выполняемый каждой из них.
Подготовить в соответствии с заданием и алгоритмами для нитей программу.
Выявить и исправить ошибки, создать удобный интерфейс, расставить по тексту программы комментарии.
Провести испытания и продемонстрировать работу программы преподавателю.
Листинг заголовочного файла программы:
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.
