Newsgroup: it.comp.lang.delphi
Titolo: Strategia da utilizzare per controllo host attivi...

Salve gente!
Domandone...
Ho sviluppato un piccolo applicativo android che controlla una lista di 
host per vedere se sono attivi alla pressione di un tasto (la lista di 
host ï¿œ tipo 80.32.3.55,90.22.6.45,etc...a video ci sono dei "nick" 
associati).
L'hostname viene letto da un file .ini in base al contenuto del listitem
 
Lo stralcio ï¿œ questo (e funziona):
 
 
for i := 0 to lbnicks.Items.Count-1 do
    begin
     if IdTCPCheck.Connected=True then begin IdTCPCheck.Disconnect; end;
     IdTCPCheck.Host:=hostinitmp.ReadString(lbnicks.items[i],'hostname','');
     try
      IdTCPCheck.Connect; 
lbnicks.ListItems[i].ItemData.Bitmap:=Image1.MultiResBitmap[1].Bitmap;
     except
      lbnicks.ListItems[i].ItemData.Bitmap:=Image1.MultiResBitmap[0].Bitmap;
      if IdTCPCheck.Connected=True then begin IdTCPCheck.Disconnect; end;
     end;
    end;
 
Il problema ï¿œ che ci mette un'abisso di tempo anche se sono 5 o 6 host 
da controllare (con 5 host ci mette 15 secondi) e finchï¿œ non ha finito 
il loop, l'app ï¿œ "congelata" del tutto.
 
Idee su come "velocizzare" il controllo?

 
 
Ah...se sono via lan ci mette 15 secondi...altrimenti un minuto!
 

 il loop, l'app ï¿oe "congelata" del tutto.
 
Dal punto di vista teorico, invece di effettuare un controllo sequenziale e attendere l'esito di ogni test prima di passare al successivo, potresti invece inserire all'interno del ciclo l'avviamento di thread multipli per eseguire in un percorso separato da quello principale la verifica di ciascun host, mettendo alla fine un'attesa (magari con un timeout) del completamento di tutti i test avviati.
 
In questo modo, idealmente, il ciclo termina subito, poiché si occupa solo di avviare i thread, la logica rimane lineare ma il tempo dovrebbe essere drasticamente ridotto dal fatto che esegui i controlli contemporaneamente, e non uno dopo l'altro.
 
Leggi la documentazione sulle routine per il threading e prova a sperimentare:
http://docwiki.embarcadero.com/RADStudio/XE6/en/Thread_Management_Routines
 
 
Ciao,
  Marco.
 
-- 
MARCO BREVEGLIERI (Software and Web Developer)
#Home: 
http://bit.ly/marcobreveglieri
 
#Blog: 
http://bit.ly/compilaquindiva
 

 Idee su come "velocizzare" il controllo?
 
Se vuoi avevo fatto un'applicazione identica alla tua, nel lontano 2006 
(sob) che utilizzava TIdIcmpClient e i thread.
Te la posso inviare a due condizioni:
1) che ti tappi gli occhi sul codice che sarï¿œ sicuramente uno schifo e 
probabilmente non funzionante al 100%
2) che poi non mi sfrantecherai i maroni con delle domande sul codice, 
visto che ormai non programmo in Delphi da anni...
 
-- 
Jax

 visto che ormai non programmo in Delphi da anni...
 
 
Nessuno è perfetto... :-D
 
 
A.
 

 Nessuno � perfetto... :-D
 
Programmavo in Delphi pi� che altro per hobby, e da qualche anno ormai 
il tempo per gli hobby non c'� pi� :(
 
-- 
Jax

Jax. mi scrivi in privato quando hai 2 sec?
 
Cia'!
 
A.


 
Ok, mi tappo gli occhi....puoi mandare a   smile_k  chiocciola   
libero.it
 
 
Grazie infinite!
 
PS: Ho dei seri problemi se l'host dall'altra parte ï¿œ in piedi ma con la 
porta d'ascolto chiusa....quando provo a connettermi vado in 
timout/excpetion dopo 5 minuti!!!!! (del timeout sul tidtcpclient non 
gliene frega un piffero!!!!)
 

Meno di 2 secondi adesso! :)

 Ok, mi tappo gli occhi....puoi mandare a   smile_k  chiocciola   
libero.it
 
 
Scusami, sto avendo dei giorni piuttosto deliranti e mi sono dimenticato 
di te.
Ho visto che perï¿œ ti sei saputo arrangiare benissimo, quindi meglio cosï¿œ!
 
-- 
Jax