Classe PC - Applet que invoca os processos de Produção e Consumo
/*****************************************************
*
Programa Produtor-Consumidor
*
Autor: Luiz Angelo Estefanel
*
JDK 1.0.2 - Kawa 2.05a
*
Setembro de 1997
*
http://www.inf.ufsm.br/~lae/prodcons.html
*****************************************************/
import
java.awt.*;
import
java.applet.*;
public class PC extends Applet {
private Scrollbar horizontal;
private Label numero;
private Label Quadro_de_Mensagens;
private B memoria_critica;
private Integer N; //
Tamanho do Buffer
private Integer csleep; //
Tempo máximo do Sleep do Consumidor (ms)
private Integer psleep; //
Tempo máximo do Sleep do Produtor (ms)
public void
init () { // Método que inicializa
um applet
// Declaração das variáveis
Integer camount; // número de consumidores
a serem criados
Integer pamount; // número de produtores
a serem criados
Integer sleeptime; // regula a velocidade
do processamento
// Inicialização das variáveis
Quadro_de_Mensagens = new
Label ("Dormindo");
numero = new
Label(""); //
contador de ocupação do buffer
// Leitura dos parâmetros passados pelo tag <APPLET>
try {
N = new Integer
(getParameter("buflenght"));
} catch (Exception
e) {
N = new Integer
("10");
}
try {
csleep = new
Integer (getParameter("csleep"));
} catch (Exception
e) {
csleep = new
Integer ("700");
}
try {
psleep = new
Integer (getParameter("psleep"));
} catch (Exception
e) {
psleep = new
Integer ("700");
}
try {
pamount = new
Integer (getParameter("pamount"));
} catch (Exception
e) {
pamount = new
Integer ("1");
}
try {
camount = new
Integer (getParameter("camount"));
} catch (Exception
e) {
camount = new
Integer ("1");
}
try {
sleeptime = new
Integer (getParameter("sleeptime"));
} catch (Exception
e) {
sleeptime = new
Integer ("400");
}
// Define layout do ambiente gráfico
makeGUI();
// Inicializa a memória crítica e os processos que vão
operá-la
memoria_critica = new
B (horizontal, numero, Quadro_de_Mensagens, N.intValue(),sleeptime.intValue());
// Criação das threads produtoras
for (int
i=1; i<=(pamount.intValue());
++i)
MakeProducer(i);
// Criação das threads consumidoras
for (int
i=1; i<=(camount.intValue());
++i)
MakeConsumer(i);
}
private void
MakeProducer (int
i) {
// declara thread do tipo P
P produtor = new
P (memoria_critica, psleep.intValue(), i);
// roda thread
produtor.start();
}
private void
MakeConsumer (int
i) {
// declara thread do tipo C
C consumidor = new
C (memoria_critica,csleep.intValue(), i);
// roda thread
consumidor.start();
}
private void
makeGUI() {
// Declaração das variáveis
Button Mensagens;
Image image1 = null;
Image image2 = null;
GridBagLayout gridbag;
GridBagConstraints c;
ImageCanvas ic1;
ImageCanvas ic2;
// inicialização das variáveis
horizontal= new
Scrollbar (Scrollbar.HORIZONTAL,0,1,0,N.intValue());
Mensagens = new
Button("Consumidor Produtor");
image1 = getImage(getCodeBase(), "cons.jpg");
ic1 = new ImageCanvas(image1,
this, 88,80);
image2 = getImage(getCodeBase(), "prod.jpg");
ic2 = new ImageCanvas(image2,
this, 112,80);
gridbag = new
GridBagLayout();
c = new GridBagConstraints();
setFont(new Font("Helvetica",
Font.PLAIN, 12));
setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.gridwidth = 1;
c.gridheight = 3;
c.weighty = 1.0;
gridbag.setConstraints(ic1,c);
add(ic1);
c.weighty = 0.0;
c.gridwidth = 2;
c.gridheight = 1;
gridbag.setConstraints(numero,c);
add(numero);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridwidth = 1;
c.gridheight = 3;
c.weighty = 1.0;
gridbag.setConstraints(ic2,c);
add(ic2);
c.gridheight = 1;
c.gridwidth = 2;
c.gridx = 1;
gridbag.setConstraints(horizontal,c);
add(horizontal);
c.gridx = 1;
c.gridwidth = 2;
gridbag.setConstraints(Mensagens,c);
add(Mensagens);
Mensagens.disable();
c.gridx = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
c.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(Quadro_de_Mensagens,c);
add(Quadro_de_Mensagens);
validate();
resize(350,105);
}
}