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 :
- class RTCConnector
- {
- private Process p;
- private boolean isConnected;
- public synchronized static boolean testConnect(String phoneNumber)
- {
- boolean result = doConnect(phoneNumber);
- doHangUp();
- return result;
- }
- public synchronized static doHangUp()
- {
- if ( isConnected )
- {
- p.destroy(); // tue le demon, libere le modem
- isConnected = false;
- }
- }
- public synchronized static boolean doConnect(String num)
- {
- // resume
- p = Runtime.getRuntime.exec("pppd ...." );
- // boucle d'attente qui recupere la liste des interfaces reseaux
- // jusqu'a avoir l'inteface "ppp0" ( = connexion ok)
- while ( !detected && attempts < 10 )
- {
- //...........
- }
- isConnected = detected;
- return detected;
- }
- }
|
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.