НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра ССОД
Расчетно-графическая работа
по дисциплине «Операционные системы»
Вариант №19
Факультет: АВТ Преподаватель
Группа: АТ-83 Родников В.В.
Студент: Черепянко В.А. Отметка о защите:
________________
Дата защиты: «____»___________2011г.
Новосибирск
2011
Содержание
стр.
Задание ……………..………………………..………………………………. 2
Принцип работы программы .………..……………………………………. 2
Листинг файла Unit1.h …………….………………………………..……… 3
Листинг файла Unit1.cpp ……...…………………………………………… 5
Список литературы ..………………………………………………………… 24
Задание:
Смоделировать работу системы слежения за графиком движения автобусов
одного маршрута. Движение каждого автобуса моделируется отдельным
потоком.
Длительность маршрута, количество остановок, расстояние между ними и
временной масштаб модели выбрать самостоятельно. Количество автобусов
на маршруте выбирается при запуске программы.
Скорости движения каждого автобуса между остановками считать
постоянной, однако на каждом перегоне она должна выбираться случайным
образом в разумном диапазоне. Предусмотреть также возможность
моделирования поломки транспортной единицы.
Система моделирования должна для любой остановки отображать
время ожидания прихода автобуса.
Принцип работы программы:
В программе создается 5 вторичных потоков (моделируют движение автобусов),
Каждый автобус управляется своим потоком. Для отображения перемещения автобуса используется объект RadioGroup. Форма на которой отображаются объекты является разделяемым ресурсом между потоками автобусов. Для обеспечения синхронизации между потоками используем объект «критическая секция».
Рис1. Главная форма программы
Листинг программы:
Файл Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TButton *Button2;
TImage *Image1;
TImage *Image2;
TImage *Image3;
TImage *Image4;
TImage *Image5;
TRadioGroup *RadioGroup1;
TLabel *Label3;
TRadioGroup *RadioGroup2;
TRadioGroup *RadioGroup3;
TRadioGroup *RadioGroup4;
TRadioGroup *RadioGroup5;
TLabel *Label4;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TLabel *Label8;
TButton *Button3;
TButton *Button4;
TButton *Button5;
TButton *Button6;
TLabel *Label1;
TLabel *Label2;
TLabel *Label9;
TLabel *Label10;
TLabel *Label11;
TLabel *Label12;
TLabel *Label13;
TLabel *Label14;
TLabel *Label15;
TLabel *Label16;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
void __fastcall Button6Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
static DWORD WINAPI AvtobusThreadFunc1(LPVOID param);
static DWORD WINAPI AvtobusThreadFunc2(LPVOID param);
static DWORD WINAPI AvtobusThreadFunc3(LPVOID param);
static DWORD WINAPI AvtobusThreadFunc4(LPVOID param);
static DWORD WINAPI AvtobusThreadFunc5(LPVOID param);
//переменные - текущая скорость каждого автобуса
double v1;
double v2;
double v3;
double v4;
double v5;
//средняя скорость автобуса
double vsr1;
double vsr2;
double vsr3;
double vsr4;
double vsr5;
double vsr6;
//переменные - отвечают за управление каждым автобусом (пауза/старт движения)
bool stop1;
bool stop2;
bool stop3;
bool stop4;
bool stop5;
HANDLE hThread1; //указатель на поток 1 автобуса
HANDLE hThread2; //указатель на поток 2 автобуса
HANDLE hThread3; //указатель на поток 3 автобуса
HANDLE hThread4; //указатель на поток 4 автобуса
HANDLE hThread5; //указатель на поток 5 автобуса
TRTLCriticalSection Sect1; //Дескриптор критической секции
TDateTime CurrentTime; //Получаем текущее время
//---------------------------------------------------------------------------
#endif
Файл Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#define rasst 2 //расстояние между остановками
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
DWORD WINAPI AvtobusThreadFunc1(LPVOID param)//поток 1-го автобуса
{
randomize();
Form1->RadioGroup1->Items->Strings[0] = TimeToStr(CurrentTime);
//функция первого автобуса
bool movpr = true; //признак - в какую сторону едем (туда или обратно)
while(1)
{
if(!stop1)
{
int polomka = random(12); //определяем произошла ли поломка
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.