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

#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г.

 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: