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