Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx31 / Отчет (3).docx
Скачиваний:
96
Добавлен:
01.08.2013
Размер:
606.3 Кб
Скачать

4. Модульная схема

Интерфейс пользователя и организация работы потоков

Unit1

Модуль для работы с потоками

Filosof

Описание основного модуляUnit1.pas

procedure ShowState(State:Byte;FilosofIndex:Byte) – процедура показывает на форме состояние State философа FilosofIndex

procedure FilosofVilkaCapture(Sender: TObject); - процедуры обработки

procedure FilosofNojCapture(Sender: TObject); взятия/освобождения вилки или ножа

procedure FilosofVilkaPut(Sender: TObject);

procedure FilosofNojPut(Sender: TObject);

Описание модуляFilosof.pas

В данном модуле описан класс TFilosof

5. Результаты тестирования программы

Начальное состояние программы

Состояние после запуска

Заключение

Итак, в этой курсовой работе было реализовано решение задачи «обедающие философы». Были изучены и закреплены навыки работы с потоками (создание, удаление), синхронизация потоков и обработка исключительных ситуаций.

Для разработки приложения использовались функции Win32 API.

Цель этой работы – изучить суть классической проблемы – синхронизации потоков. Несомненно, эта цель была достигнута. Однако мысль не стоит на месте, и возможно, уже были придуманы новые алгоритмы синхронизации, усовершенствованы и созданы новые пути решений. Но основа – суть проблемы – неизменна. Именно основе была посвящена данная курсовая работа.

Использованная литература

1.Э. Таненбаум, Современные операционные системы 2-е изд. - СПб Питер 2002 - 1040 стр.: ил.

2. Назарр К., Рихтер Дж. Windows via C/C++. Изд. Питер, 2009 г. , 896 стр.

3. Русская справка по Windows API, Windows SDK

4. http://www.msdn.microsoft.com

Приложение Основной модуль Filosof.Pas

unit Filosof;

Interface

uses Windows,SysUtils,Classes;

type

TFilosof = class

private

FVilka:THandle;

FNoj:THandle;

FThread:THandle;

FState:byte; // 0-Думает 1-Ест 2-Голодает 4 - Взял только вилку

FWorkThread:Boolean;

FTimeToThink:Cardinal; // в секундах

FTimeToEat:Cardinal;

FOnVilkaCapture:TNotifyEvent;

FOnNojCapture:TNotifyEvent;

FOnVilkaPut:TNotifyEvent;

FOnNojPut:TNotifyEvent;

procedure SetTimeToThink(const Value: Cardinal);

procedure SetTimeToEat(const Value: Cardinal);

protected

procedure DoVilkaCapture; virtual;

procedure DoNojCapture; virtual;

procedure DoVilkaPut; virtual;

procedure DoNojPut; virtual;

public

property TimeToThink:Cardinal read FTimeToThink write SetTimeToThink;

property TimeToEat:Cardinal read FTimeToEat write SetTimeToEat;

property State:Byte read FState;

property OnVilkaCapture: TNotifyEvent read FOnVilkaCapture write FOnVilkaCapture;

property OnNojCapture: TNotifyEvent read FOnNojCapture write FOnNojCapture;

property OnVilkaPut: TNotifyEvent read FOnVilkaPut write FOnVilkaPut;

property OnNojPut: TNotifyEvent read FOnNojPut write FOnNojPut;

constructor Create(AVilka,ANoj:THandle);

destructor Destroy; override;

procedure Start;

procedure Stop;

end;

Соседние файлы в папке docx31