
- •Передача данных между процессами посредством сообщений
- •Задание
- •Программа работы
- •Использованные компоненты и методы программы “Source”:
- •Листинг программы “Dest” – приёмник сообщений
- •If not r then ShowMessage('Ошибка передачи сообщения.');
- •Использованные компоненты и методы:
- •Результат работы программ
- •Лабораторная работа №2 Создание, запуск и управление процессами в многозадачной ос.
- •Листинг заголовочного файла программы:
- •Листинг исполняемого файла программы:
- •Результат работы программы:
- •Листинг заголовочного файла программы:
- •Листинг исполняемого файла программы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
- •Лабораторная работа № 4 Синхронизация задач с помощью событий.
- •Программа работы:
- •Листинг заголовочного файла программы “source”:
- •Листинг исполняемого файла программы “source”:
- •Листинг заголовочного файла программы “dest”:
- •Результат работы программы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
- •Результат работы программы:
- •Ответы на контрольные вопросы:
Программа работы:
Ознакомиться с технологией синхронизации процессов с помощью объектов-событий.
Ознакомиться со структурой функций, применяемых для создания и управления объектами-событиями в ОС Windows.
Спланировать алгоритмы процессов, работу которых требуется синхронизировать.
Подготовить в соответствии с заданием и алгоритмами программы.
Выявить и исправить ошибки, создать удобный интерфейс, расставить по тексту программ комментарии.
Провести испытания и продемонстрировать работу программы преподавателю.
Листинг заголовочного файла программы “source”:
unit Gen;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
KeyPress:THandle;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Memo1.Text:='';
KeyPress:=CreateEvent(nil,false,true,'Press');
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
SetEvent(KeyPress);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
end.
Листинг исполняемого файла программы “source”:
bject Form1: TForm1
Left = 248
Top = 233
Width = 323
Height = 168
Caption = 'Передатчик'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 8
Top = 8
Width = 297
Height = 89
Lines.Strings = (
'Memo1')
TabOrder = 0
OnChange = Memo1Change
end
object Button1: TButton
Left = 8
Top = 104
Width = 297
Height = 25
Caption = 'ЗАКРЫТЬ'
TabOrder = 1
OnClick = Button1Click
end
end
Листинг заголовочного файла программы “dest”:
program Dest;
{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;
var
KeyPress,ClosePr:THandle;
Value1,Value2:Integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
KeyPress := OpenEvent(SYNCHRONIZE, true, 'Press');
ClosePr := OpenEvent(SYNCHRONIZE, true, 'CloseProg');
while (WaitForSingleObject(KeyPress,infinite)=WAIT_OBJECT_0)
do
begin
write('*');
end;
end.
Результат работы программы:
Ответы на контрольные вопросы:
1. Что представляет собой событие?
Событие представляет собой объект, который может находиться в отмеченном или неотмеченном состоянии.
2.Перечислите функции, необходимые для управления объектами – событиями.
CreateEvent(),SetEvent(), ResetEvent(), PulseEvent(),OpenEvent()
3. Может ли одно событие использоваться сразу несколькими процессами? Как при этом идентифицируются объекты – события?
Для того, чтобы событием могли пользоваться задачи, созданные разными процессами, необходимо с помощью параметра lpName задать имя объекта – события.
Выполнил………………………………………………………….Погодаев А.М.
Преподаватель……………………………………………………….Мохов В.А.
Лабораторная работа № 5
Использование критических секций для доступа к ресурсам
Цель: освоить технологию синхронизации задач с помощью механизма критических секций в среде ОС Windows.
Оборудование: ПЭВМ IBM PC-AT 486 и выше.
Программные средства: ОС Windows (95/98/2000/, NT), Delphi 3.* (4.*, 5.*,6.*, 7*), файлы справочной документации интегрированной среды Delphi.
Задание
Разработайте программу для заполнения массива несколькими задачами одновременно, выполнив синхронизацию задач с помощью механизма критических секций.
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ImgList;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure ThreadDone(Sender: TObject);
public
{ Public declarations }
end;
TFooThread=class(TThread)
protected
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const MaxSize= 128;
var
NextNumber: Integer = 0;
DoneFlags: Integer = 0;
GlobalArray: array[1..MaxSize] of Integer;
function GetNextNumber: Integer;
begin
Result:=NextNumber;
Inc(NextNumber);
end;
procedure TFooThread.Execute;
var i: integer;
begin
OnTerminate:= Form1.ThreadDone;
for i:= 1 to MaxSize do
begin
GlobalArray[i]:= GetNextNumber;
Sleep(30);
end;
end;
procedure TForm1.ThreadDone(Sender: TObject);
var i: integer;
begin
inc(DoneFlags);
if DoneFlags = 2 then
for i:=1 to MaxSize do
Listbox1.Items.Add(IntToStr(GlobalArray[i]));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TFooThread.Create(False);
TFooThread.Create(False);
TFooThread.Create(False);
end;
end.