图老师小编精心整理的模拟进程调度(delphi写的)希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~
【 tulaoshi.com - 编程语言 】
unit Unit1;
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, Calendar, Gauges, jpeg;
type
TForm1 = class(TForm)
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
Shape7: TShape;
Shape8: TShape;
Shape9: TShape;
Shape10: TShape;
Shape11: TShape;
Shape12: TShape;
StaticText1: TStaticText;
StaticText2: TStaticText;
StaticText3: TStaticText;
StaticText4: TStaticText;
StaticText5: TStaticText;
StaticText6: TStaticText;
StaticText7: TStaticText;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit14: TEdit;
Edit15: TEdit;
Edit16: TEdit;
Edit17: TEdit;
Edit18: TEdit;
Edit19: TEdit;
Edit20: TEdit;
Edit21: TEdit;
Edit22: TEdit;
Edit23: TEdit;
Edit24: TEdit;
Edit25: TEdit;
Edit26: TEdit;
Edit27: TEdit;
Edit28: TEdit;
Button1: TButton;
Edit29: TEdit;
Timer1: TTimer;
Timer2: TTimer;
ListBox1: TListBox;
Gauge1: TGauge;
Gauge2: TGauge;
Gauge3: TGauge;
Gauge4: TGauge;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit30: TEdit;
Image1: TImage;
Label5: TLabel;
Button2: TButton;
Timer3: TTimer;
Button4: TButton;
Button5: TButton;
Button3: TButton;
Label6: TLabel;
Button6: TButton;
Timer4: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Timer4Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
pcb=record
name:string;
arv:integer;
svt:integer;
stt:integer;
fnt:integer;
zzsj:integer;
dqsj:real;
fnhflg:bool;
sttflg:bool;
end;
pcbx=array[1..4]of pcb;
var
nullflag:bool=false;
forword:bool=false;
subtemp:integer=0;
j:integer=1;
openflg:bool=true;
tempid:integer=1;
fnhnum:integer=0;
pcbnum:integer=0;
ntp:bool=false;
tempok:bool=false;
flag:bool=false;
Form1: TForm1;
showt:tdatetime;
count:integer=-1;
pro:integer=0;
//pcbnum:integer=1;
writeflg:integer=0;
pcbs:pcbx;
ho,min,sec,msec:word;
method:integer=1;
implementation
uses Unit3;
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
w:integer;
f:integer;
begin
if flag=true and nullflag=false then // 改 false 远为 true
begin
count:=count+1;
listbox1.Items.Add(inttostr(count));
for w:=1 to 4 do
begin
if pcbs[w].arv=count then
begin
timer2.Enabled:=false;
pcbnum:=pcbnum+1;
timer2.Enabled:=true;
end;
end;
if openflg=false then
begin
if (count=pcbs[tempid].stt+pcbs[tempid].svt) then
begin
pcbs[tempid].fnhflg:=true;
fnhnum:=fnhnum+1;
if fnhnum=4 then
begin
flag:=false;
pcbs[1].fnt:=pcbs[1].stt+pcbs[1].svt;
pcbs[1].zzsj:=pcbs[1].fnt-pcbs[1].arv;
pcbs[1].dqsj:=pcbs[1].zzsj/(pcbs[1].fnt-pcbs[1].stt);
pcbs[2].fnt:=pcbs[2].stt+pcbs[2].svt;
pcbs[2].zzsj:=pcbs[2].fnt-pcbs[2].arv;
pcbs[2].dqsj:=pcbs[2].zzsj/(pcbs[2].fnt-pcbs[2].stt);
pcbs[3].fnt:=pcbs[3].stt+pcbs[3].svt;
pcbs[3].zzsj:=pcbs[3].fnt-pcbs[3].arv;
pcbs[3].dqsj:=pcbs[3].zzsj/(pcbs[3].fnt-pcbs[3].stt);
pcbs[4].fnt:=pcbs[4].stt+pcbs[4].svt;
pcbs[4].zzsj:=pcbs[4].fnt-pcbs[4].arv;
pcbs[4].dqsj:=pcbs[4].zzsj/(pcbs[4].fnt-pcbs[4].stt);
edit13.Text:=inttostr(pcbs[1].stt);
edit14.Text:=inttostr(pcbs[1].stt+pcbs[1].svt);
edit15.Text:=inttostr(pcbs[1].zzsj);
edit16.Text:=floattostr(pcbs[1].dqsj);
edit17.Text:=inttostr(pcbs[2].stt);
edit18.Text:=inttostr(pcbs[2].stt+pcbs[2].svt);
edit19.Text:=inttostr(pcbs[2].zzsj);
edit20.Text:=floattostr(pcbs[2].dqsj);
edit21.Text:=inttostr(pcbs[3].stt);
edit22.Text:=inttostr(pcbs[3].stt+pcbs[3].svt);
edit23.Text:=inttostr(pcbs[3].zzsj);
edit24.Text:=floattostr(pcbs[3].dqsj);
edit25.Text:=inttostr(pcbs[4].stt);
edit26.Text:=inttostr(pcbs[4].stt+pcbs[4].svt);
edit27.Text:=inttostr(pcbs[4].zzsj);
edit28.Text:=floattostr(pcbs[4].dqsj);
end;
openflg:=true; //改!!!!!true 应为 false
tempok:=false;
end;
end;
for f:=1 to 4 do
begin
if ((count=pcbs[f].stt+pcbs[f].svt) and pcbs[f].fnhflg=true) then
listbox1.Items.Add(pcbs[f].Name+'完成!!!');
end; //for
end;//flag=ture
if openflg=false then
begin
case tempid of
1:begin
if pcbs[1].svt=1 then
begin
gauge1.MaxValue:=2;
gauge1.Progress:=2;
end
else
begin
gauge1.MaxValue:=pcbs[1].svt;
gauge1.Progress:=count-pcbs[1].stt;
end;
end;//1;
2:begin
gauge2.MaxValue:=pcbs[2].svt;
gauge2.Progress:=count-pcbs[2].stt;
end;//2;
3:begin
gauge3.MaxValue:=pcbs[3].svt;
gauge3.Progress:=count-pcbs[3].stt;
end;//3;
4:begin
gauge4.MaxValue:=pcbs[4].svt;
gauge4.Progress:=count-pcbs[4].stt;
end; //4;
end;//case of over
end;// if openflg=false then over
if pcbs[1].fnhflg=true then
gauge1.Progress:=pcbs[1].svt;
if pcbs[2].fnhflg=true then
gauge2.Progress:=pcbs[2].svt;
if pcbs[3].fnhflg=true then
gauge3.Progress:=pcbs[3].svt;
if pcbs[4].fnhflg=true then
gauge4.Progress:=pcbs[4].svt;
end;//procedure over
procedure TForm1.Button1Click(Sender: TObject);
begin
button2.Enabled:=false;
timer3.Enabled:=false;
timer2.Enabled:=true;
timer1.Enabled:=true;
timer4.Enabled:=false;
try
flag:=true;
pcbs[1].name:=edit1.text;
pcbs[1].arv:=strtoint(edit2.text );
pcbs[1].svt:=strtoint(edit3.text );
pcbs[1].sttflg:=false;
pcbs[1].fnhflg:=false;
pcbs[2].name:=edit4.text;
pcbs[2].arv:=strtoint(edit5.text );
pcbs[2].svt:=strtoint(edit6.text );
pcbs[2].sttflg:=false;
pcbs[2].fnhflg:=false;
pcbs[3].name:=edit7.text;
pcbs[3].arv:=strtoint(edit8.text );
pcbs[3].svt:=strtoint(edit9.text );
pcbs[3].sttflg:=false;
pcbs[3].fnhflg:=false;
pcbs[4].name:=edit10.text;
pcbs[4].arv:=strtoint(edit11.text );
pcbs[4].svt:=strtoint(edit12.text );
pcbs[4].sttflg:=false;
pcbs[4].fnhflg:=false;
nullflag:=false;
except
nullflag:=true;
showmessage('请将数据填完整');
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var
i:integer;
begin
if fnhnumpcbnum then
begin
if ((openflg=true) and (pcbnum0)) then
begin
for i:=1 to pcbnum do
begin
if pcbs[i].fnhflg=false then
begin
if tempok=false then
begin
subtemp:=tempid;
tempid:=i;
tempok:=true;
end;
if pcbs[i].svtpcbs[tempid].svt then
begin
//timer1.Enabled:=false;
tempid:=i;
//timer1.Enabled:=true;
end;//if pcbs[i].svtpcbs[tempid].svt then
end;//for
end;
openflg:=false;
pcbs[tempid].stt:=count;
pcbs[tempid].sttflg:=true;
//listbox1.Items.Add('进程'+pcbs[subtemp].name+'fnh');
listbox1.Items.Add('进程'+pcbs[tempid].name+'被调度');
end;//if(openflg=true and pcbnum0)then
end;//if fnhnumpcbnum then
end; //procedure
procedure TForm1.Button2Click(Sender: TObject);
begin
button1.Enabled:=false;
timer1.Enabled:=false;
timer2.Enabled:=false;
timer3.Enabled:=true;
timer4.Enabled:=true;
try
flag:=true;
pcbs[1].name:=edit1.text;
pcbs[1].arv:=strtoint(edit2.text );
pcbs[1].svt:=strtoint(edit3.text );
pcbs[1].sttflg:=true;
pcbs[1].fnhflg:=false;
pcbs[2].name:=edit4.text;
pcbs[2].arv:=strtoint(edit5.text );
pcbs[2].svt:=strtoint(edit6.text );
pcbs[2].sttflg:=false;
pcbs[2].fnhflg:=false;
pcbs[3].name:=edit7.text;
pcbs[3].arv:=strtoint(edit8.text );
pcbs[3].svt:=strtoint(edit9.text );
pcbs[3].sttflg:=false;
pcbs[3].fnhflg:=false;
pcbs[4].name:=edit10.text;
pcbs[4].arv:=strtoint(edit11.text );
pcbs[4].svt:=strtoint(edit12.text );
pcbs[4].sttflg:=false;
pcbs[4].fnhflg:=false;
nullflag:=false;
except
nullflag:=true;
showmessage('请将数据填完整');
end;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
var
m:integer;
begin
if ((flag=true )and (ntp=false)and (nullflag=false)) then
begin//if falg=true then
count:=count+1;
listbox1.Items.Add(inttostr(count));
for m:=1 to 4do
begin //for m:=1 to 5 do
if((pcbs[m].sttflg=true) and (pcbs[m].fnhflg=false))then
begin//if(pcb[m].sttflg=true and pcb[m].fnhflg=false)
if count=pcbs[m].stt+pcbs[m].svt then
begin//if (count=pcbs[m].stt+pcbs[m].svt)then
pcbs[m].fnhflg:=true;
//timer4.Enabled:=false;
pro:=0;
//timer4.Enabled:=true;
listbox1.Items.Add('进程:'+pcbs[m].name+'完成!!');
if m4 then
begin//if m4 then
//pcbs[m+1].sttflg:=true;
//pcbs[m+1].stt:=count;
forword:=true;
end;//if m4 then
pcbs[m].fnt:=count;
pcbs[m].zzsj:=pcbs[m].fnt-pcbs[m].arv;
pcbs[m].dqsj:=pcbs[m].zzsj/(pcbs[m].fnt-pcbs[m].stt);
end;//if (count=pcbs[m].stt+pcbs[m].svt)then
end;//if(pcb[m].sttflg=true and pcb[m].fnhflg=false)
end;//for m:=1 to 5 do
if pcbs[4].fnhflg=true then
begin
ntp:=true;
edit13.Text:=inttostr(pcbs[1].stt);
edit14.Text:=inttostr(pcbs[1].stt+pcbs[1].svt);
edit15.Text:=inttostr(pcbs[1].zzsj);
edit16.Text:=floattostr(pcbs[1].dqsj);
edit17.Text:=inttostr(pcbs[2].stt);
edit18.Text:=inttostr(pcbs[2].stt+pcbs[2].svt);
edit19.Text:=inttostr(pcbs[2].zzsj);
edit20.Text:=floattostr(pcbs[2].dqsj);
edit21.Text:=inttostr(pcbs[3].stt);
edit22.Text:=inttostr(pcbs[3].stt+pcbs[3].svt);
edit23.Text:=inttostr(pcbs[3].zzsj);
edit24.Text:=floattostr(pcbs[3].dqsj);
edit25.Text:=inttostr(pcbs[4].stt);
edit26.Text:=inttostr(pcbs[4].stt+pcbs[4].svt);
edit27.Text:=inttostr(pcbs[4].zzsj);
edit28.Text:=floattostr(pcbs[4].dqsj);
end;
for m:=1 to 4 do
begin
if ((count=pcbs[m].arv) and (pcbs[m].sttflg=false)) then
if forword=true then
begin
pcbs[m].sttflg:=true;
pcbs[m].stt:=count;
forword:=false;
end;//3and
end;// for m:=1 to 4 do
gauge1.MaxValue:=pcbs[1].svt;
gauge2.MaxValue:=pcbs[2].svt;
gauge3.MaxValue:=pcbs[3].svt;
gauge4.MaxValue:=pcbs[4].svt;
if pcbs[1].sttflg=true and pcbs[1].fnhflg=false then
begin
//gauge1.Progress:=gauge1.MaxValue:=pcbs[1].svt;
gauge1.Progress:=count-pcbs[1].stt;
end// if pcbs[1].sttflg=true and pcbs[1].fnhflg=false then
else if pcbs[1].fnhflg=true then
gauge1.Progress:=pcbs[1].svt;
if pcbs[2].sttflg=true and pcbs[2].fnhflg=false then
begin
gauge2.Progress:=count-pcbs[2].stt;
end// if pcbs[1].sttflg=true and pcbs[1].fnhflg=false then
else if pcbs[2].fnhflg=true then
gauge2.Progress:=pcbs[2].svt;
if pcbs[3].sttflg=true and pcbs[3].fnhflg=false then
begin
gauge3.Progress:=count-pcbs[3].stt;
end// if pcbs[1].sttflg=true and pcbs[1].fnhflg=false then
else if pcbs[3].fnhflg=true then
gauge3.Progress:=pcbs[3].svt;
if pcbs[4].sttflg=true and pcbs[4].fnhflg=false then
begin
gauge4.Progress:=count-pcbs[4].stt;
end// if pcbs[1].sttflg=true and pcbs[1].fnhflg=false then
else if pcbs[4].fnhflg=true then
gauge4.Progress:=pcbs[4].svt;
end; //if falg=true then
end;//procedure over
procedure TForm1.Button3Click(Sender: TObject);
begin
form1.Close;
//end.//do over
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
forword:=false;
subtemp:=0;
j:=1;
openflg:=true;
tempid:=1;
fnhnum:=0;
pcbnum:=0;
ntp:=false;
tempok:=false;
flag:=false;
gauge1.Progress:=0;
gauge2.Progress:=0;
gauge3.Progress:=0;
gauge4.Progress:=0;
button2.Enabled:=true;
button1.Enabled:=true;
count:=-1;
pro:=0;
//pcbnum:integer=1;
writeflg:=0;
flag:=false;
nullflag:=false;
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
edit6.Text:='';
edit7.Text:='';
edit8.Text:='';
edit9.Text:='';
edit10.Text:='';
edit11.Text:='';
edit12.Text:='';
edit13.Text:='系统填写';
edit14.Text:='系统填写';
edit15.Text:='系统填写';
edit16.Text:='系统填写';
edit17.Text:='系统填写';
edit18.Text:='系统填写';
edit19.Text:='系统填写';
edit20.Text:='系统填写';
edit21.Text:='系统填写';
edit22.Text:='系统填写';
edit23.Text:='系统填写';
edit24.Text:='系统填写';
edit25.Text:='系统填写';
edit26.Text:='系统填写';
edit27.Text:='系统填写';
edit28.Text:='系统填写';
pcbs[1].fnhflg:=false;
pcbs[1].sttflg:=false;
pcbs[2].fnhflg:=false;
pcbs[2].sttflg:=false;
pcbs[3].fnhflg:=false;
pcbs[3].sttflg:=false;
pcbs[4].fnhflg:=false;
pcbs[4].sttflg:=false;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
form3.show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.FormStyle:=fsstayontop;
animatewindow(handle,2000,AW_center);
form1.FormStyle:=fsnormal;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
edit1.Text:='A';
edit2.Text:='0';
edit3.Text:='3';
edit4.Text:='B';
edit5.Text:='5';
edit6.Text:='2';
edit7.Text:='C';
edit8.Text:='5';
edit9.Text:='3';
edit10.Text:='D';
edit11.Text:='5';
edit12.Text:='2';
end;
procedure TForm1.Timer4Timer(Sender: TObject);
begin
if ((pcbs[1].arv=count) and (pcbs[1].sttflg=false)) then
begin
forword:=true;
end;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;
type
TForm2 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
type
pcb=record
name:string;
arv:integer;
svt:integer;
stt:integer;
fnt:integer;
zzsj:integer;
dqsj:real;
fnhflg:bool;
sttflg:bool;
end;
pcbx=array[1..4]of pcb;
var
Form2: TForm2;
pcbs:pcbx;
implementation
uses Unit1;
{$R *.dfm}
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, jpeg, ExtCtrls;
type
TForm3 = class(TForm)
RichEdit1: TRichEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
end.
来源:http://www.tulaoshi.com/n/20160219/1622333.html
看过《模拟进程调度(delphi写的)》的人还看了以下文章 更多>>