模拟进程调度(delphi写的)

温柔的小桃子丶

温柔的小桃子丶

2016-02-19 19:56

图老师小编精心整理的模拟进程调度(delphi写的)希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~
 

  unit Unit1;

  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}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  

  
  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;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  
  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}

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  end.

展开更多 50%)
分享

猜你喜欢

模拟进程调度(delphi写的)

编程语言 网络编程
模拟进程调度(delphi写的)

进程调度模拟程序

编程语言 网络编程
进程调度模拟程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

linux进程调度方法

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
linux进程调度方法

Linux系统中关于Kill命令的进程调度问题

电脑入门
Linux系统中关于Kill命令的进程调度问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

我对DELPHI写的几个基类型

编程语言 网络编程
我对DELPHI写的几个基类型

用Delphi编写系统进程监控程序

编程语言 网络编程
用Delphi编写系统进程监控程序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

将多个jpg文件以追加形式合并成一个文件

将多个jpg文件以追加形式合并成一个文件

改良版TStringList类

改良版TStringList类
下拉加载更多内容 ↓