📄 unit2.cpp
字号:
else
{p2->next=p1->next;
p1->state='W';
form2_hready=insert(form2_hready,p1);
str5="\tID号为: " ;
str5+=IntToStr(p1->id);
str5+=" 的进程由阻塞队列转入就绪队列!\r\n";
p1=p2->next;
}//else
} //大if
else
{p2=p1;
p1=p1->next;
} //else
Form2->Memo1->Lines->Add(str5);
} //whlie
}//block
//---------------------------------------------------------------------------
void testnew() //检测是否有新的进程产生
{
int t;
AnsiString str6;
if(r>0)
{
t=random(9); //生成随机数
if(t<=7) //如果随机数小于等于7,则产生新进程,否则不产生
{
form2_p=getpcb(PCB);
str6+="有新的进程申请加入:\r\n" ;
form2_p->id=form2_i++;
str6+="进程ID:";
str6+=IntToStr(form2_p->id);
str6+="\r\n";
form2_p->ra=(random(a-3));
str6+="所需A类资源数:";
str6+=IntToStr(form2_p->ra);
str6+="\r\n";
form2_p->rb=(random(b-3));
str6+="所需B类资源数:";
str6+=IntToStr(form2_p->ra);
str6+="\r\n";
form2_p->rc=(random(c-3));
str6+="所需C类资源数:";
str6+=IntToStr(form2_p->ra);
str6+="\r\n";
form2_p->ntime=(random(5)+1);
str6+="所需时间片个数:";
str6+=IntToStr(form2_p->ntime);
str6+="\r\n";
form2_p->rtime=0;
form2_p->next=NULL;
if (((a-(form2_p->ra))>=0)&&((b-(form2_p->rb))>=0)&&((c-(form2_p->rc))>=0))
{ //进程满足要求,进入阻塞队列
a=a-(form2_p->ra);
b=b-(form2_p->rb);
c=c-(form2_p->rc);
form2_p->state='w';
str6+="当前进程状态:";
str6+=(form2_p->state);
str6+="\r\n";
form2_hready=insert(form2_hready,form2_p);
str6+="资源满足新进程需求,该进程进入就绪队列!";
}//if
else //进程不满足要求,进入阻塞队列
{
form2_p->state='B';
form2_hblock=insert(form2_hblock,form2_p);
str6+="当前进程状态:";
str6+=(form2_p->state);
str6+="\r\n";
str6+="资源不能满足新进程需求,该进程进入阻塞队列!" ;
}//else
}//for
Form2->Memo1->Lines->Add(str6);
}//if(r>0)
r--;
}//testnew
//---------------------------------------------------------------------------
void runmain() //运行的主函数
{
AnsiString str,str1;
input();
Form2->Timer1->Enabled=true;
str+="\r\n";
}
//---------------------------------------------------------------------------
void rescore()
{
if(a>a1) {Form2->Edit7->Text=IntToStr(a1);}
if(a<0) {Form2->Edit7->Text=0;}
if(a>=0&&a<a1) {Form2->Edit7->Text=IntToStr(a);}
if(b>b1) {Form2->Edit8->Text=IntToStr(b1);}
if(b<0) {Form2->Edit8->Text=0;}
if(b>=0&&b<=b1) {Form2->Edit8->Text=IntToStr(b); }
if(c>c1) {Form2->Edit9->Text=IntToStr(c1);}
if(c<0) {Form2->Edit9->Text=0;}
if(c>=0&&c<=c1) {Form2->Edit9->Text=IntToStr(c); }
}
//------------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//button
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender) //开始模拟按钮
{
runmain();
Form2->Button1->Enabled=false;
Form2->Edit1->Enabled=false;
Form2->Edit2->Enabled=false;
Form2->Edit3->Enabled=false;
Form2->Edit4->Enabled=false;
Form2->Edit5->Enabled=false;
Form2->Edit6->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender) //清除屏幕按钮
{
Form2->Memo1->Clear();
Button1->Enabled=true;
h=0;
Form2->Edit1->Enabled=true;
Form2->Edit2->Enabled=true;
Form2->Edit3->Enabled=true;
Form2->Edit4->Enabled=true;
Form2->Edit5->Enabled=true;
Form2->Edit6->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Form2->Memo1->Clear();
Button1->Enabled=true;
h=0;
Form2->Edit1->Enabled=true;
Form2->Edit2->Enabled=true;
Form2->Edit3->Enabled=true;
Form2->Edit4->Enabled=true;
Form2->Edit5->Enabled=true;
Form2->Edit6->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1KeyPress(TObject *Sender, char &Key)
{
Form2->Memo1->Clear();
Button1->Enabled=true;
h=0;
Form2->Edit1->Enabled=true;
Form2->Edit2->Enabled=true;
Form2->Edit3->Enabled=true;
Form2->Edit4->Enabled=true;
Form2->Edit5->Enabled=true;
Form2->Edit6->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
runFcfs();
}
void runFcfs()
{ AnsiString str;
if(form2_hready!=NULL) //如果就绪队列为非空,则不断运行,直到就绪队列为空为止
{
check();
form2_hready=running(form2_hready);
testblock();
testnew();
rescore() ;
}
else
{
Form2->Timer1->Enabled=false;
Form2->Edit7->Text=IntToStr(a1);
Form2->Edit8->Text=IntToStr(b1);
Form2->Edit9->Text=IntToStr(c1);
str+="\r\n\r\n<<<<<<<<<<<<<<<所 有 的 进 程 都 已 经 成 功 运 行 结 束 !>>>>>>>>>>>>>>";
Form2->Memo1->Lines->Add(str);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N2Click(TObject *Sender)
{
runmain();
Button1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N8Click(TObject *Sender)
{
if(Form2->SaveDialog1->Execute())
{
FILE* fp=fopen(Form2->SaveDialog1->FileName.c_str(),"w");
if(fp==NULL)
{
MessageBox(NULL,"打开文件出错","信息",MB_OK);
return;
}
for(int i=0;i<Form2->Memo1->Lines->Count;i++)
{ fputs(Form2->Memo1->Lines->Strings[i].c_str(),fp);
fputc('\n',fp);
}
fclose(fp);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N7Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -