Hallo,
ich hätte ein kleines Problem...
Ich arbeite an einem "kleineren" Programm, das verschiedene Daten erzeugt, diese an ein Berechnungsmodul weitergibt, in diesem Modul wird ein externes Programm aufgerufen, das die eigentliche Berechnung vornimmt und die Daten ans Berechnungsmodul zurückgibt, das Berechnungsmodul speichert die Ergebnisse als Datei, die wiederum mein eigentliches Programm lädt.
Ich habe eine dataModel-Objekt als Instanz einer Klasse CDataModel zur Verfügung, mit der ich auf alle Funktionalitäten des Berechnungsmoduls zugreifen kann. Über
kann ich die Berechnung starten in der Hoffnung, dass alles funktioniert und ich die Ergebnisse anschließend aus der Datei lesen kann.
Das funktioniert auch, aber eher schlecht als recht. Es gibt ein massives Performance-Problem (bis jetzt nur auf meinem Rechner), das aber zu beheben sein müsste, nur weiß ich nicht wie.
Dazu vielleicht mal etwas mehr Quellcode der Klasse CDataModel.
Wie gesagt, es funktioniert... . Allerdings dauert eine externe Berechnung nun eine halbe Minute, statt einer Sekunde. Die Zeile "while(unothread.isAlive()){}" ist natürlich hässlich und wahrscheinlich geht da auch die Zeit verloren, aber ich weiß nicht, wie man es umgehen kann. Lässt man sie weg, dann ist die Berechnungsdauer wie gewohnt schnell, aber thread meldet fertig, obwohl unothread noch rechnet. Damit kann ich dann keine Ergebnisse holen. Ich habe auch ein wenig mit join() rumgespielt, aber das stoppt alles komplett und gar keine Berechnung scheint ausgeführt zu werden.
Hmm... kann mir jemand weiterhelfen?
Grüße,
Manuel
ich hätte ein kleines Problem...
Ich arbeite an einem "kleineren" Programm, das verschiedene Daten erzeugt, diese an ein Berechnungsmodul weitergibt, in diesem Modul wird ein externes Programm aufgerufen, das die eigentliche Berechnung vornimmt und die Daten ans Berechnungsmodul zurückgibt, das Berechnungsmodul speichert die Ergebnisse als Datei, die wiederum mein eigentliches Programm lädt.
Ich habe eine dataModel-Objekt als Instanz einer Klasse CDataModel zur Verfügung, mit der ich auf alle Funktionalitäten des Berechnungsmoduls zugreifen kann. Über
Code:
dataModel.StartCalculation()
Das funktioniert auch, aber eher schlecht als recht. Es gibt ein massives Performance-Problem (bis jetzt nur auf meinem Rechner), das aber zu beheben sein müsste, nur weiß ich nicht wie.
Dazu vielleicht mal etwas mehr Quellcode der Klasse CDataModel.
Code:
class CDataModel{
...
...
Thread unothread;
...
...
public void StartCalculation(){
// läd Daten
CThreadCalculation thread = new CThreadCalculation();
thread.start();
}
private void calculate(...){
// bereitet eigentliche Berechnung vor
// instanziert unothread, der eigentliche Berechnung ans externe Programm weitergibt und abholt
}
class CThreadCalculation extends Thread{
...
...
public void run(){
try{
CDataModel.this.calculate(...);
while(unothread.isAlive()){
}
}
catch(...){}
}
}
}
Wie gesagt, es funktioniert... . Allerdings dauert eine externe Berechnung nun eine halbe Minute, statt einer Sekunde. Die Zeile "while(unothread.isAlive()){}" ist natürlich hässlich und wahrscheinlich geht da auch die Zeit verloren, aber ich weiß nicht, wie man es umgehen kann. Lässt man sie weg, dann ist die Berechnungsdauer wie gewohnt schnell, aber thread meldet fertig, obwohl unothread noch rechnet. Damit kann ich dann keine Ergebnisse holen. Ich habe auch ein wenig mit join() rumgespielt, aber das stoppt alles komplett und gar keine Berechnung scheint ausgeführt zu werden.
Hmm... kann mir jemand weiterhelfen?
Grüße,
Manuel