- •Курсовая работа
- •1 Теоретический вопрос «Конечные автоматы. Двоичные автоматы.»
- •Введение
- •1.2 Способы задания автоматов Мили
- •1.2.1 Табличный способ
- •1.2.2 Графический способ
- •1.3 Элементарные автоматы
- •2.1 Постановка задачи
- •2.2Реализация задачи с помощью сетей Петри
- •1.4 Вывод
- •2 Решение задачи «о спящем парикмахере»
- •2.3 Листинг программы
- •2.3.1 Фрагмент программы «Barber»
- •2.3.2 Фрагмент программы «Hall»
- •2.3.3 Фрагмент программы «Main»
- •3 Список использованных источников
2.3.3 Фрагмент программы «Main»
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;
STARTUPINFO si1;
STARTUPINFO si2;
PROCESS_INFORMATION piApp1;
PROCESS_INFORMATION piApp2;
HANDLE hMutex;
HANDLE hSemSeat;
HANDLE hSemBench;
HANDLE hEventCustomer;
HANDLE hEventParik;
//---------------------------------------------------------------------------
void Start()
{
char IpszAppName1[] = "C:\\Kursovaya\\Barber\\Debug_Build\\Barber_1.exe";
char IpszAppName2[] = "C:\\Kursovaya\\Hall\\Debug_Build\\Hall_1.exe";
STARTUPINFO si1;
STARTUPINFO si2;
PROCESS_INFORMATION piApp1;
PROCESS_INFORMATION piApp2;
ZeroMemory(&si1, sizeof(STARTUPINFO));
si1.cb = sizeof(STARTUPINFO);
ZeroMemory(&si2, sizeof(STARTUPINFO));
si2.cb = sizeof(STARTUPINFO);
CreateProcess(IpszAppName1, NULL, NULL, NULL, FALSE,
NULL, NULL, NULL, &si1, &piApp1);
CreateProcess(IpszAppName2, NULL, NULL, NULL, FALSE,
NULL, NULL, NULL, &si2, &piApp2);
hMutex = OpenMutex(SYNCHRONIZE, FALSE, "myMutex");
hSemSeat = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "Seat");
hSemBench = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "Bench");
hEventCustomer = OpenEvent(SYNCHRONIZE, FALSE, "myEventCustomer");
hEventParik = OpenEvent(EVENT_MODIFY_STATE, FALSE, "myEventParik");
}
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ButtonStartClick(TObject *Sender)
{
ButtonExit->Enabled = true;
Start();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ButtonExitClick(TObject *Sender)
{
TerminateProcess(piApp1.hProcess,1);
TerminateProcess(piApp2.hProcess,1);
CloseHandle(piApp1.hThread);
CloseHandle(piApp1.hProcess);
CloseHandle(piApp2.hThread);
CloseHandle(piApp2.hProcess);
CloseHandle(hMutex);
CloseHandle(hSemSeat);
CloseHandle(hSemBench);
CloseHandle(hEventCustomer);
CloseHandle(hEventParik);
HWND KlientWin;
HWND ParikWin;
PostMessage(FindWindow(NULL, "Hall_1"), WM_QUIT,0,0);
PostMessage(FindWindow(NULL, "Barber"), WM_QUIT,0,0);
exit(0);
}
//---------------------------------------------------------------------------
3 Список использованных источников
Романов В. Ф. Теория абстрактных автоматов. – Владимир, 2006.
Карпов Ю. Г. Теория автоматов. – СПб.: Питер, 2002. - 206 с.
Минский М. Вычисления и автоматы. – М.: Мир, 1971. - 364 с.
Применение теории автоматов [Электронный ресурс]. Режим доступа: http://teorya.hut.ru
