Thread et Process

Thread et Process - Java - Programmation

Marsh Posté le 17-05-2005 à 15:58:32    

Hello
J'ai un souci de threads dans mon application...
 
En gros je fais un truc pour savoir si des machines distantes sont en lignes. Il ya une méthode qui lance le test sur toute la liste de machine, sachant que le test peut etre un ping si la machine est reliée au LAN ou un test de connexion RTC si celle-ci est isolée.
 
Donc je lance un test pour chaque machine dans un Thread. Seulement, je n'ai qu'un modem et je ne peux tester qu'une connexion modem à la fois. J'ai donc mis un petit synchronized dans la déclaration de la méthode :
 

Code :
  1. class RTCConnector
  2. {
  3.     private Process p;
  4.     private boolean isConnected;
  5.     public synchronized static boolean testConnect(String phoneNumber)
  6.     {
  7.           boolean result = doConnect(phoneNumber);
  8.           doHangUp();
  9.           return result;
  10.     }
  11.     public synchronized static doHangUp()
  12.     {
  13.           if ( isConnected )
  14.           {
  15.                p.destroy(); // tue le demon, libere le modem
  16.                isConnected = false;
  17.           }
  18.     }
  19.     public synchronized static boolean doConnect(String num)
  20.     {
  21.          // resume
  22.          p = Runtime.getRuntime.exec("pppd ...." );
  23.          // boucle d'attente qui recupere la liste des interfaces reseaux
  24.          // jusqu'a avoir l'inteface "ppp0" ( = connexion ok)
  25.          while ( !detected && attempts < 10 )
  26.          {
  27.              //...........
  28.          }
  29.          isConnected = detected;
  30.          return detected;
  31.     }
  32. }


 
 
Le problème
 
Le premier Thread à etablir une connexion modem fonctionne correctement, les threads suivant sont bien suspendus jusqu'à ce que le premier thread établisse la connexion et libère le modem.  
Mais, lorsque le Thread suivant reprends la main, il ne peut plus etablir de connexion. Le problème se situe au niveau de l'objet Process qui apparemment ne relance pas le démon. Si j'execute les tests les uns apres les autres, cela fonctionne. Y'a-t-il quelque chose qui m'echappe dans les méchanismes d'attente ?


Message édité par boulax le 17-05-2005 à 16:02:12

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

Marsh Posté le 17-05-2005 à 15:58:32   

Reply

Marsh Posté le 17-05-2005 à 16:07:22    

juste un truc, rien a voir avec les thread.
 tu peut pas utiliser java directement au lieu de faire un getRuntime.exe() :??:
 
 y a pas de methode pour ca?


---------------
IVG en france
Reply

Marsh Posté le 17-05-2005 à 16:12:01    

c'est quoi l'intérêt d'avoir plusieurs threads si un seul peut être actif à la fois ?
il peut pas n'y en avoir qu'un seul qui irait chercher sont boulkot dans une file de courrier en retard ?


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

Marsh Posté le 17-05-2005 à 16:12:18    

uriel a écrit :

juste un truc, rien a voir avec les thread.
 tu peut pas utiliser java directement au lieu de faire un getRuntime.exe() :??:
 y a pas de methode pour ca?


Bah disons que la partie numérotation, ce serait possible (envoyer les commandes aux modems) mais négocier les parametres de connexion ppp avec la machine distante et creer la nouvelle interface réseau ça me semble plutot chaud brulant :/


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

Marsh Posté le 17-05-2005 à 16:14:56    

nraynaud a écrit :

c'est quoi l'intérêt d'avoir plusieurs threads si un seul peut être actif à la fois ?
il peut pas n'y en avoir qu'un seul qui irait chercher sont boulkot dans une file de courrier en retard ?


A coté de ca, il y a moults thread qui font des pings. Mais en fait je pourrai peut etre gérer ces cas avec des threads et les cas connexion modem dans une boucle séquentielle...


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

Marsh Posté le 17-05-2005 à 16:18:14    

ben tu fais une file de boulot, un tas de thread à bosser [:spamafote]
 
tu peux même configurer le nombre de thread dynamiquement comme ça.


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

Marsh Posté le 17-05-2005 à 16:18:48    

En fait comme solution de secours je pourrai faire:
 
méthode qui teste tout -> thread 1 -> n thread pour n test ping
                       -> thread 2 -> tests sequentielles pour les connexion RTC


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

Marsh Posté le 17-05-2005 à 16:20:51    

oué et puis pas lancer tous les pings en même temps ça serait intelligent aussi [:moule_bite]


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

Marsh Posté le 17-05-2005 à 16:42:16    

nraynaud a écrit :

oué et puis pas lancer tous les pings en même temps ça serait intelligent aussi [:moule_bite]


je vois pas le problème :??:


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

Marsh Posté le 17-05-2005 à 16:47:29    

moi je le vois :o


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

Marsh Posté le 17-05-2005 à 16:47:29   

Reply

Marsh Posté le 17-05-2005 à 16:51:52    

Y'aura pas 1500 objets a pinger hein :o


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

Marsh Posté le 18-05-2005 à 10:45:35    

CA MARCHE \0/
 
et avec la solution de base, fallait juste attendre un peu apres le kill du démon, le temps de le laisser se remettre (2-3 sec) et c'est bon.


Message édité par boulax le 18-05-2005 à 10:46:22

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

Sujets relatifs:

Leave a Replay

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