Newsgroup: it.comp.lang.visual-basic
Titolo: Variazioni di velocita' nell'esecuzione

Il programma cui sto lavorando gestisce un numero variabile elementi
all'interno di un array. Ogni singolo elemento e' piuttosto corposo
(diciamo tre-quattro kb). Si tratta di una simulazione in tempo reale,
quindi mi interessa che venga eseguito un ciclo principale piu' volte
possibile al secondo. Ogni ciclo comporta operazioni su un certo
numero variabile di elementi dell'array. Il problema e' che,
nonostante le routines siano sostanzialmente lineari, se gli elementi
su cui operare sono compresi entro le 130/140  unita' la velocita' di
esecuzione e' di 18 cicli al secondo; se sono appena poche unita' in
piu', dimezza, passando a nove cicli/sec.
Puo' essere che sia perche' i cicli principali sono innescati da un
timer (a 5 millisecondi)? E che modi alternativi avrei per innescarli
senza bloccare la macchina? 
Ciao,
Anders

se usi win9x, 5 millisecondi sono veramente pochi. Win 9x NON è realtime
Su NT il discorso cambia, perchè il kernel è realtime, comunque penso che un
timer a 5 millisecondi sia comunque molto poco.
Considera che win (qualsiasi) si riserva del tempo per fare le sue cosucce,
e rischi (parecchio) che ti salti qualche ciclo.
basta che per analizzare 100 elementi impieghi 4,9999 millisec. Se aggiungi
un solo elemento impuega 5,00001 millisec e ti "salta" un ciclo. Ecco che il
tempo sembra RADDOPPIARE!
soluzioni:
    aumenta l'intervallo: 5 millisec sono troppo pochi per win
    aumenta la priorità associata al tuo prog
    scrivi una routine in C
    cambia sistema operativo ;-) ce ne sono di realtime che costano alcuni
milioni di lire - sto scherzando.
auguri
"Anders" <co...@TOGLIlibero.it> wrote in message
news:3b576e11...@news.libero.it...


 > timer (a 5 millisecondi)? E che modi alternativi avrei per innescarli
Aggiungerei che è possibile che aumentando di poco gli elementi tu vada
oltre la dimensione della pagina di memoria, e quindi subisca un
rallentamento, per quanto piccolo, per il cambio pagina.
In  più non sai di preciso Vb cosa combina con gli array.
Questo è uno di quei rarissimi casi in cui suggerirei un array GLOBALE, e
statico (no redim).
Ciao
Alfonso
P.S. Questo vale per Nt. Se stai usando Win9x sei matto!

    scrivi una routine in C
Mhh, ci stavo pensando. Non so come interfacciarla con il VB, ma temo
che questa sia un argomento un po' complicato per chiedere
delucidazioni qui sul ng.
Ciao e grazie,
Anders

statico (no redim).
Gia' fatto.
Ciao,
Anders

C/C++) eventualmente in una DLL da richiamare poi in VB).
Grazie, queste informazioni mi saranno molto utili (soprattutto quella
sulla precisione del clock). In realta' io uso il timer solo per
produrre un'esecuzione continua senza bloccare win. Non esiste un
altro modo per farlo? Cioe' non e' possibile chiedere a Win che
aspetti un tot DOPO la fine dell' esecuzione di ogni ciclo, in modo da
lasciargli il tempo per fare le sue cose?
Ciao,
Anders 

separato dall'interfaccia grafica (se c'e') ...
Uhmmm...  andiamo sul complicato.
In ogni caso, potresti dirmi come cambiare la priorita' del task, che
non ne ho idea?
Ciao, e grazie,
Anders

 non funziona piu' niente, si blocca tutto. Multitasking? Boh.
In questo caso devi usare DoEvents
sub main()
    do
      display
      calcoli
      DoEvents
      .........
    loop
end sub 
-- 
Samuele Battarra
mail server: 
libero.it
, indirizzo: battarsa@(mail server)
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/leggiminews.html