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

Листинг программы Основная программа для запуска парикмахера и клиента

#include <vcl.h>

#pragma hdrstop

#include "Main.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

bool flag;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory(&si,sizeof(si));

si.cb=sizeof(si);

ZeroMemory(&pi,sizeof(pi));

if(!CreateProess(NULL,PChar("Parikmaher_prg"),NULL,NULL,false,0,NULL,NULL,&si,&pi))

{

ShowMessage("Процесс не создан");

Close();

}

flag=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

float vero;

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory(&si,sizeof(si));

si.cb=sizeof(si);

if(flag)

{

vero=Random();

if(vero>0.3) // если вероятность того что он придет >70 то создаем

{

if(!CreateProcess(NULL,PChar("Klient"),NULL,NULL,false,0,NULL,NULL,&si,&pi))

{

ShowMessage("Процесс не создан");

Close();

}

}

// s:=floattostr(vero);

// ShowMessage(s);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Randomize();

}

//---------------------------------------------------------------------------

Парикмахер

#include <vcl.h>

#pragma hdrstop

#include "Parikmaher.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int count;

bool flag;

HANDLE workhear;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

HANDLE sem_1,semaph;

flag=false;

//Создаем семафор на 5 мест(зал ожиданий)

semaph=CreateSemaphore(NULL,5,5,"Zal_Ozidania");

//Создаем семафор на одно место

sem_1=CreateSemaphore(NULL,1,1,"Kreslo");

Memo1->Lines->Add("Жду клиентов");

count=0; // Счетчик ожидания

flag=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

HWND Find_client;

if(flag)

{

//Проверка на наличие клиентов

Find_client=FindWindow(NULL,PChar("Klient"));

//Клиента нет

if(!Find_client)

{

count++;

if(count>5)

{

Memo1->Lines->Clear();

Memo1->Lines->Add("Сплю я...");

}

else

{

Memo1->Lines->Clear();

Memo1->Lines->Add("Клиентов нет");

}

}

else

//Клиен есть

{

count=0;

Memo1->Lines->Clear();

Memo1->Lines->Add("Стригу клиента");

}

}

}

Клиент

#include <vcl.h>

#pragma hdrstop

#include "Klien.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

bool flag;

HANDLE sem_2;

HANDLE sem_3;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Randomize();

Form1->Top=Random(560)+30;

Form1->Left=50;

Memo1->Lines->Add("Хожу-брожу");

Memo1->Lines->Add("Надо бы подстричься");

flag=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

if(flag)

{

sem_2=OpenSemaphore(SYNCHRONIZE+EVENT_MODIFY_STATE,false,"kreslo");

sem_3=OpenSemaphore(SYNCHRONIZE+EVENT_MODIFY_STATE,false,"Zal_Ozidania");

if(WaitForSingleObject(sem_3,2000)==WAIT_OBJECT_0) // на очередь

{

Form1->Left=550;

Memo1->Lines->Clear();

Memo1->Lines->Add("Сижу в очереди");

if ((WaitForSingleObject(sem_2,INFINITE)==WAIT_OBJECT_0)) // на кресло парикмахера

{

ReleaseSemaphore(sem_3,1,NULL); //добавляем одно свободное место

//в случае если место у парик свободно

Form1->Left=800;

Memo1->Lines->Clear();

Memo1->Lines->Add("Стригут");

Sleep(4000);

ReleaseSemaphore(sem_2,1,NULL);

flag=False;

CloseHandle(sem_3);

CloseHandle(sem_2);

Close();

}

}

else

{

Memo1->Lines->Clear();

Memo1->Lines->Add("Мест нет");

Sleep(500);

Close();

}

}

}

Список использованной литературы

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

2. Кудряшов И.Г. Операционные системы. Учебный курс. Теоретическая часть. 2002г.

22

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]