Alguém tem uma idéia melhor para a ,implementação do FIFO em Delphi?
Consegui fazer o escalonamento de processo com um processo.
Mais pra dois da problema.
procedure TForm2.show(cor:Tcolor; tipo:string; tempo:integer);
begin
inherited show;
//vCor2[Form3.contador] := cor;
vtempo[Form3.contador] := tempo;
vtipo[Form3.contador] := tipo;
inc(contadorAux);
fila_aptos := TQueue.create;
fila_aptos.Push(Tcor.create(cor)); //push coloca um item no final da fila
atualiza_fila;
if Form3.contador = 2 then
if vtipo[contadorAux] = 'I/O Bound' then
delay(tempo*3000*500*500*500*500)
else
delay(tempo*3000*500*500*500);
inc(Form3.contador);
try
while Tcor(fila_aptos.Peek).valor <> clblack do
begin
if contadorAux = 0 then
exit;
//Caso for I/O Bound
if vtipo[contadorAux] = 'I/O Bound' then
begin
pop := Tcor(fila_aptos.pop).valor;
//pop := vCor2[contadorAux];
delay(tempo*500);
IO.Brush.Color := pop;
if vCor2[contadorAux + 1] = clblack then
begin
s1.Visible := false;
end
else
if fila_aptos.Count <> 0 then
//atualiza_fila;
delay(tempo*3000);
IO.brush.color := clwhite;
CPU.brush.color := pop;
delay(tempo*500);
CPU.brush.color := clwhite;
IO.brush.color := pop;
delay(tempo*500);
IO.brush.color := clwhite;
CPU.brush.color := pop;
delay(tempo*500);
CPU.brush.color := clwhite;
//Finaliza processo
fin.Visible := true;
fin.brush.color := pop;
delay(tempo*500);
fin.Visible := false;
delay(tempo*500);
dec(contadorAux);
dec(Form3.contador);
end
else
//Caso for CPU Bound
begin
pop := Tcor(fila_aptos.pop).valor;
//pop := vCor2[contadorAux];
delay(tempo*500);
CPU.brush.color := pop;
if vCor2[contadorAux + 1] = clblack then
begin
s1.Visible := false;
end
else
if fila_aptos.Count <> 0 then
atualiza_fila;
delay(tempo*3000);
CPU.brush.color := clwhite;
//Finaliza Processo
fin.Visible := true;
fin.brush.color := pop;
delay(tempo*500);
fin.Visible := false;
delay(tempo*500);
dec(contadorAux);
dec(Form3.contador);
end;
if contadorAux = 0 then
exit;
end; //Fim do while
finally
fila_aptos.free;
end; //fim do try
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
label16.Caption := inttostr(i);
if odd(i) then
shape3.Visible := true
else
shape3.Visible := false;
inc(i);
end;
procedure TForm2.Bt2Click(Sender: TObject);
begin
status := 'true';
end;
//TIME SLACE ou FATIA DE TEMPO
procedure TForm2.Delay(MSec: Cardinal);
var Start: Cardinal;
begin
Start := GetTickCount;
repeat
Application.ProcessMessages;
until (GetTickCount - Start) >= MSec;
end;
procedure TForm2.Bt3Click(Sender: TObject);
begin
close;
end;
procedure TForm2.Bt1Click(Sender: TObject);
begin
Form3.show('FIFO');
if Form3.contador < 10 then
form3.visible := true
else showmessage('Limite de processos');
end;
//ordena os processos na fila
procedure TForm2.atualiza_fila;
var px:integer;
begin
for px:=1 to contadorAux do
begin
if contadorAux = 0 then
exit;
if contadorAux = 1 then
begin
s1.brush.color := Tcor(fila_aptos.Peek).valor;
s1.visible := true;
end;
if contadorAux = 2 then
begin
s2.brush.color := Tcor(fila_aptos.Peek).valor;
s2.visible := true;
end;
if contadorAux = 3 then
begin
s3.brush.color := Tcor(fila_aptos.Peek).valor;
s3.visible := true;
end;
if contadorAux = 4 then
begin
s4.brush.color := Tcor(fila_aptos.Peek).valor;
s4.visible := true;
end;
if contadorAux= 5 then
begin
s5.brush.color := Tcor(fila_aptos.Peek).valor;
s5.visible := true;
end;
if contadorAux = 6 then
begin
s6.brush.color := Tcor(fila_aptos.Peek).valor;
s6.visible := true;
end;
if contadorAux = 7 then
begin
s7.brush.color := Tcor(fila_aptos.Peek).valor;
s7.visible := true;
end;
if contadorAux = 8 then
begin
s8.brush.color := Tcor(fila_aptos.Peek).valor;
s8.visible := true;
end;
if contadorAux = 9 then
begin
s9.brush.color := Tcor(fila_aptos.Peek).valor;
s9.visible := true;
end;
if status = 'true' then
exit;
if contadorAux = 0 then
exit;
end;
end;
//Fatia de tempo do objeto Trackbar
function TForm2.timeslice(ts: integer): integer;
begin
if TrackBar1.Position = 0 then
ts := 2000;
if TrackBar1.Position = 1 then
ts := 1000;
if TrackBar1.Position = 2 then
ts := 800;
if TrackBar1.Position = 3 then
ts := 500;
if TrackBar1.Position = 4 then
ts := 400;
if TrackBar1.Position = 5 then
ts := 300;
if TrackBar1.Position = 6 then
ts := 200;
if TrackBar1.Position = 7 then
ts := 100;
if TrackBar1.Position = 8 then
ts := 75;
if TrackBar1.Position = 9 then
ts := 60;
if TrackBar1.Position = 10 then
ts := 30;
Result := ts;
end;
Pergunta
Inforjo
Alguém tem uma idéia melhor para a ,implementação do FIFO em Delphi?
Consegui fazer o escalonamento de processo com um processo.
Mais pra dois da problema.
Mais detalhes baixe o simulador em:
http://br.groups.yahoo.com/group/inforjo/f...DSO%20-%202010/
ou
http://br.groups.yahoo.com/group/inforjo/
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.