Ich schon wieder.. *g* Laut anderen älteren Beiträgen hier sollte man einen Thread relativ einfach mit name.interrupt() beenden können wenn man im Thread isinterrupted() abfragt. Meiner scheint da etwas wiederspenstig zu sein. Mit einem Button starte ich den Thread, der läuft dann in seiner while Schleife die immer auf isinterrupted prüft vor sich hin bis ich mit einem 2. Button name.interrupt() aufrufe. Problem: Klicke ich einmal auf stop, ist das dem Thread meistens ziemlich egal. Klick ich ein paarmal drauf, merkt ers aber irgendwann?! Kann es sein das da irgendwas isinterrupted wieder auf false setzt von selbst?
Die run Methode:
Starten:
Stop:
Habe ich irgenwas ungewöhnliches Eingebaut in der Schleife was interrupt lahm legt? Oder denke ich falsch..
Die run Methode:
Code:
public void run(){
int loops = 0;
double starttime = 0;
double endtime = 0;
while (!Thread.currentThread().isInterrupted()){
if (loops == 100){
Calendar a = Calendar.getInstance();
starttime = (double)a.getTime().getTime();
}
for (int i = 0; i < corecount; i++){
if (pointsperthread * i + 2 * pointsperthread > pointcount){
worker[i] = new Thread(new Worker(cache, pointcount, timestep, pointsperthread * i, pointcount, method, writecache[i]));
}
else{
worker[i] = new Thread(new Worker(cache, pointcount, timestep, pointsperthread * i, pointsperthread * i + pointsperthread, method, writecache[i]));
}
worker[i].start();
}
for (int i = 0; i < corecount; i++) {
try {
worker[i].join();
}
catch (InterruptedException e) {}
}
for (int i = 0; i < corecount; i++){
if (pointsperthread * i + 2 * pointsperthread > pointcount){
cache.set(writecache[i].get(), pointsperthread * i, pointcount);
}
else{
cache.set(writecache[i].get(), pointsperthread * i, pointsperthread * i + pointsperthread);
}
}
/*try{
sleep(1000);
}
catch (InterruptedException e){}*/
if (loops == 200){
Calendar b = Calendar.getInstance();
endtime = (double)b.getTime().getTime();
bench.setText(String.valueOf((int)(100 * pointcount / (endtime - starttime))) + " Calcs / ms");
loops = 0;
}
loops++;
}
}
Starten:
Code:
Thread renderloop = new Thread(new Render(graph, jPanel3, 20, cache, pointcount));
renderloop.start();
Stop:
Code:
threadhandler.interrupt();
Habe ich irgenwas ungewöhnliches Eingebaut in der Schleife was interrupt lahm legt? Oder denke ich falsch..