Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
int TForm1:: GenTask (int a,int b) // генерация размера задачи
{
return(a + 10*random((b+10)/10));
}
int TForm1:: GenTime (int a,int b,int tsk) // генерация времени следующей задачи
{
return(tsk + a + random(b+1));
}
int TForm1:: IncTerminal (int a)
{
if(a<2) a++;
else {a = 0; cycle++;}
return a;
}
int TForm1:: GetTask (src *s,int i) // генерация задачи
{
if(s[i].ntime == t) {
s[i].task = GenTask(gen_task,lng_task);
s[i].ntime = GenTime(gen_time,lng_time,t);
return 1;
}
else return 0;
}
void TForm1:: BeginParam(src *source,str *store, proc *CPU)
{
for(int i=0;i<3;i++) {
source[i].ntime = 0;
source[i].task = 0;
store[i].task = 0;
}
store[3].task = 0;
CPU->terminal = 0;
CPU->end_proc = 0;
gen_time = StrToInt(edGen_time->Text);
lng_time = StrToInt(edLng_time->Text);
gen_task = StrToInt(edGen_task->Text);
lng_task = StrToInt(edLng_task->Text);
proc_speed = StrToInt(edProc_speed->Text);
proc_time = StrToInt(edProc_time->Text);
End_time = StrToInt(edTime->Text);
count_task_first = 0;
cycle = 0;
count_err = 0;
count_task = 0;
t = 0;
Series1->Clear();
Series2->Clear();
}
void TForm1:: OutParam(str *st)
{
float temp= count_err;
Edit3->Text = count_task;
Edit4->Text = count_task_first;
Edit5->Text = count_task - count_task_first;
Edit6->Text = count_err;
Edit8->Text = st[3].task;
Edit9->Text = cycle;
Edit1->Text = temp/(count_err+count_task);
}
int TForm1:: Processing(str *st, proc *CPU)
{
int i = CPU->terminal;
if(st[i].task>0) { // в накопителе терминала имеется заявка
if((st[i].task/proc_speed) <= proc_time) {
CPU->end_proc = t + st[i].task/proc_speed; // напрямую в ЭВМ
count_task_first++;
st[i].task = 0;
count_task++;
}
else {
st[3].task += st[i].task - proc_speed * proc_time;//в ЭВМ и часть в буфер
CPU->end_proc = t + proc_time;
st[i].task = 0;
count_task++;
}
}
else {
if(st[3].task>0) { // решается задача из буфера
if((st[3].task/proc_speed) <= proc_time) {
CPU->end_proc = t + st[3].task/proc_speed;
st[3].task = 0;
}
else {
st[3].task = st[3].task - proc_speed * proc_time;
CPU->end_proc = t + proc_time;
}
}
else return 0;
}
CPU->terminal = IncTerminal(CPU->terminal);
Series1->AddXY(t,st[3].task);
Series2->AddXY(t,st[0].task);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
src *source = new src [3];
str *store = new str [4];
proc *CPU = new proc;
BeginParam(source,store,CPU);
for(t=0;t<End_time;t++)
{
CGauge1->Progress = t;
for(int i=0;i<3;i++) // заполнение терминалов задачами
if(GetTask(source,i)) {
if(store[i].task==0) {
store[i].task = source[i].task;
source[i].task = 0;
}
else count_err++;
}
if(CPU->end_proc<=t) Processing(store,CPU); // Обработка задач
}
OutParam(store);
}
void __fastcall TForm1::Q1Click(TObject *Sender)
{
Form2->ShowModal();
}
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form3->ShowModal();
}
Дата публикования: 2015-10-09; Прочитано: 197 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!