Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi con il controllo Timer

Ciao a tutti,
mi scuso in anticipo per la banalità della questione, ma credo di
commettere un errore logico che non mi fa comprendere il problema.
Ho un controllo Timer su una form di cui ho fissato l'intervallo a
T=50 millisecondi (Timer1.Interval=50), ossia in 1 secondo l'evento
timer viene richiamato 20 volte.
Se dunque lascio eseguire l'evento timer 100 volte, dovrebbero essere
trascorsi 5 secondi, invece misurandone il tempo effettivo risultano
7.57 secondi.
Ancora, riducendo l'intervallo a T=10 (Timer1.Interval=10), cioè 100
eventi al secondo, dopo 250 eventi invece di 2.5 secondi, sono
trascorsi in realtà 18.51 secondi.
Dunque più piccolo è l'intervallo e più il tempo effettivo di
esecuzione del ciclo si dilata.
Qualche idea in proposito?
Se qualcuno lo richiede posso attaccare un piccolo listato VB5 (1KB
zippato) con l'esempio che sto provando.
Ciao,
  Giovanni
Ciao,
   Giovanni 
---
e-mail: gbuomm...@SoftHome.net
To reply please remove 'INGO'.
---


Il problema é molto semplice: la proprietà interval del controllo timer é
solo VIRTUALMENTE impostabile su di 1 (quindi intervalli di 1 millisecondo)
In realtà però VB genera un evento timer al più ogni 18mo di secondo quindi
il numero massimo di eventi timer in un secondo(esclusi rallentamenti dovuti
ai processi in esecuzione CHE NON SONO RITARDI TRASCURABILI) sono 18. Quindi
se tu aspetti 100 eventi timer impostati con interval=10 in realtà ottieni
un tempo pari a 1/18 di sec *100=18 sec circa (il mezzo secondo in piu é
dovuto al ritardo per i processi in corso)
Purtroppo questi sono i limiti di precisione del controllo  timer standard
di VB. Al sito comune del newsgroup però mi pare ci fosse un ocx timer molto
più preciso: Vai a Vedere!
IL SITO COMUNE é 
www.murialdo.it:8000/it_lang_vb/
Spero di averti chiarito tutto,
Marco 
mde...@stardust.it


Spiego per l'ennesima volta (ma perche' non andate su 
www.deja.com
 e vi fate
una bella ricerca sui vecchi messaggi, prima di postare qui?)...
I timers di Windows (e quindi il controllo Timer di VB, che usa quelli)
hanno una precisione minima di 55ms. Puoi settare Interval ad un valore
inferiore, ma la precisione rimane sempre 55ms.
Inoltre, i messaggi WM_TIMER (che scatenano l'evento Timer del controllo
Timer di VB) hanno priorita' bassa, quindi puo' esserci un ritardo tra
l'effettivo scadere del tempo di intervallo e l'evento Timer.Timer
(soprattutto se il sistema e' abbastanza occupato).
Sommando questi ritardi su un periodo lungo, si puo' arrivare a differenze
notevoli tra il tempo trascorso teorico e quello effettivo (come hai
notato...).
Se proprio ti serve un timer piu' preciso, sul Sito Comune
(
http://www.murialdo.it/it_lang_vb/
) c'e' un OCX con sorgenti VB5 (cerca
MMTimer) che usa i timers multimediali di Windows, che hanno precisione di
1ms.
Attenzione: i timers multimediali richiedono molte risorse e occupano molto
il processore, inoltre sono (come i timer normali) una risorsa scarsa, nel
senso che e' possibile usarne contemporaneamente _solo_ un numero molto
limitato. Quindi usalo con cautela!
--
Roal Zanazzi
z...@iol.it


NO! Il Sito Comune e' 
www.murialdo.it/it_lang_vb/
.
NON usate l'8000 (e' li solo per motivi tecnici)!!!
--
Roal Zanazzi
z...@iol.it