Newsgroup: it.comp.lang.delphi
Titolo: Organizzazione struttura dati

Ciao a tutti. 
Sono alle prese con lo sviluppo (in Delphi) di un monitor di rete
basato sul componente TIdIcmpClient.
Il dubbio che ho è sul come organizzare la struttura dati dei nodi. 
Avevo pensato ad una soluzione come questa:
- creo un un tipo record (struttura generica per ogni nodo) come
questo:
    Type
      Tnode = record
        Address     : ShortString;        // ip address
        Description : ShortString;        // description
        IsUP        : Boolean;            // state
      end;
- creo un array di Tnode per tutti i nodi che devo monitorare:
    Var
      Nodes : array [1..10] of Tnode;     // nodes
- carico i dati dei nodi:
    Nodes[1].Address     := '192.168.1.1';
    Nodes[1].Description := 'Gateway';
    Nodes[2].Address     := '192.168.1.10';
    Nodes[2].Description := 'Slackware Workstation';
    [...]
- Itero l'array pingando un nodo alla volta, per mezzo di
nodes[i].Address e così via.
Ora, il programma funziona, però i nodi da monitorare (per il momento)
sono molto pochi. Visto che per ottenere informazioni sui nodi down
devo iterarmi tutto l'array, esiste una implementazione più pulita o
migliore della struttura attuale? Il metodo attuale diventa molto
lento se il numero dei nodi supera il 200.
Inoltre, esiste un funzione per ampliare un array in fase di runtime?
Tipo, se scopro in runtime che mi servono (es) 15 nodi piuttosto dei
10 dichiarati, che posso fare? So che delphi supporta l'allocazione
dinamica della memoria come il c.
Grazie per l'attenzione, sarò grato a chiuque riuscirà a fornirmi
suggerimenti.
Matteo

dinamica della memoria come il c.
Sě, il sistema esiste, perň, come suggerivo, lascia che sia la TList
ad occuparsene.
-- 
Ore 18.30: premo invio.

Il dubbio che ho č sul come organizzare la struttura dati dei nodi. 
Invece io guarderei questo applicativo da una prospettiva piu' OOP:
applicandogli un bel observer pattern puoi avere la notifica in tempo reale se
un nodo dovesse rivelarsi down. Inoltre lo scorrimento ciclico degli array
potresti (anzi sarebbe meglio) isolarlo in un thread separato.
Qui trovi un esempio di observer pattern implementato in delphi:
http://members.tripod.com/mplank/ProjectOO/Observer/observer.htm
Have a nice implementation ;-)
-- 
Morde. (
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/
Firefox, il miglior browser: 
http://www.gxware.org/mozilla/

 
http://members.tripod.com/mplank/ProjectOO/Observer/observer.htm
Altri articoli interessanti sull'Observer e in generale sul MVC e la
sua estensione MVP li può trovare in:
http://www.joannac.btinternet.co.uk/
IMHO, probabilmente, non è la scansione dell'array a rivelarsi critica
quanto il ping ai vari indirizzi dei nodi.
Convertirei i record in classi ed inserirei il codice per aprire un
thread per ogni classe che pinga in maniera indipendente in un thread.
Uno o più osservatori riceveranno quindi la notifica da parte di ogni
oggetto.
Eventualmente si può pensare di astrarre l'apertura del thread in
un'altra classe specifica che si occupa di aprire i thread per ogni
oggetto passato.
Ciao
Antonio

thread per ogni classe che pinga in maniera indipendente in un thread.
MITTTTTTTICOOOOOO!!!
:D


Antonio
Massimo.


 eccessiva.
Senza dubbio. Se gli oggetti divengono molti non č la soluzione piů
idonea, a quel punto i thread non darebbero vantaggi rilevanti. La tua
soluzione mi sembra buona, eventualmente prevedendo anche dei pool di
threads nel caso il nostro amico avesse bisogno di massima efficienza,
perň le cose divengono un pň piů complesse.
Ciao
Antonio