Hallo bekomme ein einfaches Producer Consumer Programm nicht zum laufen mit Threads bzw. verhält es sich vollkommen falsch, wäre nett, könnte mir jemand helfen.
Also es gibt ein Interface ProduceListener:
public interface ProducerListener {
public void itemReady(Producer producer);
public void endOfProduction(Producer producer);
}
Dann eine Klasse Producer
import java.lang.Thread;
public class Producer extends Thread {
private String id;
private int count;
private int item;
private ProducerListener listener;
public Producer(String id, int numberOfItems) {
this.id = id;
this.count = numberOfItems;
}
public void setProducerListener(ProducerListener listener) {
this.listener = listener;
}
public int pickUpItem() {
return this.item;
}
public String getId() {
return this.id;
}
public void run() {
int i;
for (i=1;i<=this.count;i++) {
/* Niemand darf unseren Produzer jetzt betreten, da dieser das Item produziert*/
synchronized(this){
this.item = i;
/*Consumer aufwecken dass dieser Producer (this) nun fertig ist.*/
this.listener.itemReady(this);
try {
// wait for Producer to put value
this.wait();
} catch (InterruptedException e) {
}
}
}
//this.listener.endOfProduction(this);
}
}
Und ne klasse Konsumer :
public class Consumer extends Thread implements ProducerListener{
private Producer myProducer;
private int itemP;
private boolean available;
public Consumer (Producer p1,Producer p2) {
p1.setProducerListener(this);
p2.setProducerListener(this);
this.available = true;
}
public void itemReady(Producer producer) {
this.myProducer = producer;
this.notify();
}
public void endOfProduction(Producer producer){
//synchronized(this) {
// this.available =false;
// this.notify();
//}
}
public void run() {
while (this.available ==true ) {
synchronized(this.myProducer){
try {
// wait for Producer to put value
this.myProducer.wait();
} catch (InterruptedException e) {
}
this.itemP = this.myProducer.pickUpItem();
this.myProducer.notifyAll();
}
System.out.println(this.myProducer.getId()+":"+this.itemP);
}
}
}
Leider funkt das alles gar nicht richtig: der Konsument hat praktisch 2 Produzenten, der Produzent nützt das Interface , um den Konsumenten bescheid zu geben, falls ein item produziert worden ist (ITem = Zahl in diesem Fall)
Was mache ich da falsch ?
L.g fips
Beiträge von fips
-
-
noch ne frage hätte ich.
geht es , dass ich einem char *zeiger auch um eine Adresse weitersetze ?
L.g Reinhard -
-
hallo.
Habe ein char buffer [MAXLINE] array.
In dieses lese ich eine Zeile ein die ich dann durchsuchen soll.
Nun würd ich eine funktion suchen, die mir diesen buffer ab einer gewissen Stelle (z.B: buffer[2] mit einem anderen charakter vergleicht.
leider geht strcmp(buffer[stelle x], x) nicht --> Speicherfehler ...
Danke für Tipps
L.g Reinhar -
es stehen zeichen von 0-9 drinnen ....,...
l.g fips und herzlichen dank für die Erklärungen, da hätt ich noch lange kompliziert gearbeitet... -
Danke an alle.
Alex_K ---->> Deine Erläuterung leuchtet mir ein. Doch was hat das mit dem - '0' auf sich. Hab solche Varianten schon desöfteren gesehen, bin mir aber nicht im klaren darüber , weshalb man das verwendet.
L.g Fips -
Hallo. Habe ständig einen Speicherzugriffsfehler und verstehe nicht weshalb.
Folgender Versuch.
int a[4];
int i;
for (i=0;i<4;i++)
a[i] = atoi(zahl[i]);
// zahl ist hierbei einfach ein char[4] array. doch beim übersetzen schreibt er mir als Warning schon hin "passing arg 1 of atoi makes pointer from integer without a cast". Ich verstehe das irgendwie nicht, wie ich das sonst machen könnte. Ich brauche nun mal die einzelnen Characters hier an dieser Stelle.
Hat wer eine Idee, was ich hier falsch mache, arbeite mich gerade so richtig in C ein....
Danke im Voraus , fips -
Frage, hab ein kleines programmiertechnisches Problem.
Erstelle eine vierstellige Zufallszahl. Ein benutzer gibt ebenso eine vierstellige Zahl ein. Meine Frage: Wie komm ich bei der ZUfallszahl an die einzelnen Zahlen. z.B: 9812 aufschluesseln auf 9,8,1,2. Komm einfach nicht drauf, das Spiel nennt sich Mastermind. Damit man vergleichen kann, wieviele Zahlen uebereinstimmen.
L.g Fips -
Hallo!
Hab ne Frage: Kennt sich jemand mit Exceptions in C++ aus ?
Hab ein Programm, das bei der Eingabe einen Integer entgegen nimmt. Kommt ein char, stürzt es ab. Möchte dies aber abfangen, wie macht man das ?
Wäre nett,könnte mir jemand helfen!