[java] Mécanisme de timout simple

Mécanisme de timout simple [java] - Java - Programmation

Marsh Posté le 27-06-2006 à 11:10:55    

bonjour,
 
je cherche à faire un mécanisme de timout simple
 
 
une classe server lance une methode call qui ne doit répondre dans les 10 secondes
 
pour le moment je fais comme celà :
 

Code :
  1. int timeout = 10000; // timout en millisecondes
  2. CallThread call = new CallThread(); // thread parrallele
  3. call.start();
  4. while( call.isAlive() && timeout>0 ){
  5.   try {
  6.     Thread.sleep(1000);
  7.   } catch (InterruptedException e) {e.printStackTrace();}
  8.   timeout--;
  9. }
  10. if( call.isAlive()){
  11.   call.stop(); // TODO a corriger stop() déprécié
  12.   System.out.print("timeout" );
  13. }else{
  14.   System.out.print("response : "+call.getResponse());
  15. }


 
le problème de cette méthode est qu'avec le sleep() le thread peut terminer son execution et il faut attendre la fin du sleep
 
sinon en version wait-notify, j'ai peur de faire une usine a gaz.
 
quel autre méthode exite-t-il pour faire un mécanisme de timeout efficace ?

Reply

Marsh Posté le 27-06-2006 à 11:10:55   

Reply

Marsh Posté le 27-06-2006 à 14:40:15    

http://java.sun.com/j2se/1.5.0/doc [...] Timer.html


Message édité par boulax le 27-06-2006 à 14:40:39

---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 27-06-2006 à 15:41:06    

ça me semble permettre de répéter dans le temps mais pas de faire une execution avec timeout

Reply

Marsh Posté le 27-06-2006 à 15:47:20    

J'ai pas compris alors, en fait tu voudrais executer une méthode et l'interrompre si elle prends plus de n secondes pour s'executer ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 27-06-2006 à 16:19:57    

oui, en faite je lance un thread maintenant, qui doit répondre en N secondes sinon il est stoppé

Reply

Marsh Posté le 27-06-2006 à 17:54:05    

à la volée :  
 

Code :
  1. final Thread worker = new Thread(new Runnable() {
  2.   public void run() {
  3.     //bosse
  4.   }
  5. };
  6. worker.start();
  7. new Timer().schedule(new TimerTask() {
  8.   public void run() {
  9.     worker.interrupt();
  10.   }
  11. }, 10000);


 
voiloù, code non testé.


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed