salut
en train d'écrire une application multithreads, j'essaye de mettre en place un procédé de remplacement de la méthode suspend() (et resume() du coup) qui n'est pas très sure (suspend(), pas mon procédé enfin...)
j'ai déjà fait pour stop(), c'est assez facile, et c'est décrit pas mal de fois, j'ai donc utilisé un procédé identique pour suspend()/resume():
public class monThread implements Runnable {
public static boolean monThreadPause = false;
...
public void run() {
while( ) {
...
while(this.monThreadPause) {
try {(new Thread()).sleep(500);}
catch (InterruptedException ie) {}
}
}
...
}
...
public void pause() {
this.monThreadPause = !this.monThreadPause;
}
}
public class monApp {
private monThread monTh;
private boolean monThEnPause = false;
...
if(!this.monThEnPause) {
//this.monTh.suspend();
this.monTh.setPriority(Thread.MIN_PRIORITY);
this.jLabelE.setText("en pause" );
}
else {
//this.monTh.resume();
this.monThsetPriority(Thread.NORM_PRIORITY);
this.jLabelE.setText("en cours" );
}
this.monThEnPause = !this.monThEnPause;
this.monTh.pause();
...
} |
donc, comme vous pouvez voir, lors d'une pause, je "bloque" le thread dans une boucle infinie sur le booléen monThreadPause. ce booléen est positionné à true par une méthode de la classe du thread appelée par l'application (même principe que pour remplacer la méthode stop()). pour réduire le coût en ressources, j'ai fais 2 trucs: baisser la priorité du thread au minimal, positionner le thread dans l'état endormi (ici à la périodicité de 500ms)
(ps: juste pour info, je gère (pour le moment) de manière indépendante un booléen pour marquer l'état "pause" du thread qui est différent entre le thread lui-même et l'application)
le résultat attendu est obtenu: le thread se met bien pause et peut être relancé où il s'est arrêté, et il ne consomme pas ou très peu de ressources processeur
mais, comme je teste ça, sur mon intuition, je ne sais pas si c'est très propre, si on peut améliorer, ou si je me suis pris la tête pour rien, et qu'il y a une autre méthode bien plus optimisée (et peutetre plus simple)
vos avis ?
merci d'avance
Message édité par trevor le 18-12-2005 à 23:35:47
---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net