Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[?]Come visualizzo il valore corrente di un timer

51 views
Skip to first unread message

Cesare Nicola

unread,
May 9, 1999, 3:00:00 AM5/9/99
to
Come posso fare per appoggiare il valore corrente di un timer ad una
variabile? In altre parole, se un timer con Interval = 10000 (10 secondi)
sta contando ed è arrivato a 6 secondi, io vorrei vedere nella variabile 6 o
6000 ( oppure 4 o 4000, visto che sono passati 4 secondi da quando ha
iniziato a contare).

Grazie
Cesare Nicola

brando

unread,
May 10, 1999, 3:00:00 AM5/10/99
to

Ciao!
Non credo che sia possibile fare quello che chiedi con un solo timer:
infatti l'evento timer viene generato una volta ogni tot secondi, e
quindi non c'e' modo di sapere da quanto tempo e' stato generato
l'ultimo (o tra quanto verra' generato il prossimo) senza ricorrere ad
un secondo timer (con interval=1000, ad esempio) da far partire insieme
al primo: ad ogni evento timer del timer piu' veloce (1 sec.) aggiorni
la tua label, e la riazzeri quando viene generato l'altro evento timer
(quello con interval=10000).

Spero di essere stato chiaro!

Ciao
Brando

Marco Bonati

unread,
May 10, 1999, 3:00:00 AM5/10/99
to
Perchè non utilizzi solo un timer impostato a 1000 e rilevi se una variabile
è uguale a 10 per lanciare un evento ?


Cesare Nicola wrote in message <7h4vfm$7b6$1...@nslave1.tin.it>...


>Come posso fare per appoggiare il valore corrente di un timer ad una
>variabile? In altre parole, se un timer con Interval = 10000 (10 secondi)
>sta contando ed è arrivato a 6 secondi, io vorrei vedere nella variabile 6
o
>6000 ( oppure 4 o 4000, visto che sono passati 4 secondi da quando ha
>iniziato a contare).
>

>Grazie
>Cesare Nicola
>
>

Cesare Nicola

unread,
May 10, 1999, 3:00:00 AM5/10/99
to
brando ha scritto


>Ciao!
>Non credo che sia possibile fare quello che chiedi con un solo timer:
>infatti l'evento timer viene generato una volta ogni tot secondi, e
>quindi non c'e' modo di sapere da quanto tempo e' stato generato
>l'ultimo (o tra quanto verra' generato il prossimo) senza ricorrere ad
>un secondo timer (con interval=1000, ad esempio) da far partire insieme
>al primo: ad ogni evento timer del timer piu' veloce (1 sec.) aggiorni
>la tua label, e la riazzeri quando viene generato l'altro evento timer
>(quello con interval=10000).

L'avevo già provato, ma non so perchè, il timer "più lungo" arriva prima di
quello più corto. Mi spiego meglio: un timer con interval 30000, finisce il
conteggio quando quello con interval 1000 è arrivato a 28 eventi anzichè 30,
sebbene li faccio partire contemporaneamente. Può darsi che stia sbagliando
qualcosa, verificherò meglio.

>Marco Bonati ha scritto


>Perchè non utilizzi solo un timer impostato a 1000 e rilevi se una
variabile
>è uguale a 10 per lanciare un evento?

Grazie, proverò anche questa.

P.S.: non è che i timer di VB non sono poi così precisi e quindi, col
passare dei secondi, "l'imprecisione" si accumula fino a raggiungere
differenze rilevanti?


Ciao
Cesare Nicola

Roal Zanazzi

unread,
May 10, 1999, 3:00:00 AM5/10/99
to
Cesare Nicola ha scritto nel messaggio <7h4vfm$7b6$1...@nslave1.tin.it>...

>Come posso fare per appoggiare il valore corrente di un timer ad una
>variabile? In altre parole, se un timer con Interval = 10000 (10 secondi)
>sta contando ed è arrivato a 6 secondi, io vorrei vedere nella variabile 6
o
>6000 ( oppure 4 o 4000, visto che sono passati 4 secondi da quando ha
>iniziato a contare).
>
Non esiste modo di conoscere tempi intermedi nel conteggio di un timer.
Quindi non si puo' fare se Interval e' posto a 10000, ma potresti fare
cosi':
1) imposti Interval = 1000 (ogni secondo)
2) a livello di modulo dichiari una variabile Dim Counter As Long
3) nella routine Timer (ogni secondo, quindi) incrementi la variabile
Counter

A questo punto, durante i 10 secondi, hai un contatore che conta i secondi
trascorsi.
Chiaramente nella routine Timer devi anche controllare quando Counter
raggiunge il valore 10 (secondi), e agire di conseguenza (stoppare il timer,
etc...)

--
Roal Zanazzi
z...@iol.it


Cesare Nicola

unread,
May 10, 1999, 3:00:00 AM5/10/99
to
>Non esiste modo di conoscere tempi intermedi nel conteggio di un timer.
>Quindi non si puo' fare se Interval e' posto a 10000, ma potresti fare
>cosi':
>1) imposti Interval = 1000 (ogni secondo)
>2) a livello di modulo dichiari una variabile Dim Counter As Long
>3) nella routine Timer (ogni secondo, quindi) incrementi la variabile
>Counter
>
>A questo punto, durante i 10 secondi, hai un contatore che conta i secondi
>trascorsi.
>Chiaramente nella routine Timer devi anche controllare quando Counter
>raggiunge il valore 10 (secondi), e agire di conseguenza (stoppare il
timer,
>etc...)


Tutto OK, funziona. Penso però che i timer di VB siano una schifezza.
Controllando con un cronometro, quando il timer ha raggiunto 30 interventi,
quindi 30 secondi, il cronometro segna 34 secondi!!

Ciao
Cesare Nicola

Roal Zanazzi

unread,
May 10, 1999, 3:00:00 AM5/10/99
to
Cesare Nicola ha scritto nel messaggio <7h6e80$1bj$1...@nslave1.tin.it>...

>L'avevo già provato, ma non so perchè, il timer "più lungo" arriva prima di
>quello più corto. Mi spiego meglio: un timer con interval 30000, finisce il
>conteggio quando quello con interval 1000 è arrivato a 28 eventi anzichè
30,
>sebbene li faccio partire contemporaneamente. Può darsi che stia sbagliando
>qualcosa, verificherò meglio.
>
>P.S.: non è che i timer di VB non sono poi così precisi e quindi, col
>passare dei secondi, "l'imprecisione" si accumula fino a raggiungere
>differenze rilevanti?
>
Il problema (una volta tanto) non e' VB, ma Windows.
Non ti spiego i dettagli, comunque sappi che hai azzeccato... e non ci si
puo' fare nulla :-(

--
Roal Zanazzi
z...@iol.it


Leonardo Tagliavini

unread,
May 11, 1999, 3:00:00 AM5/11/99
to

Cesare Nicola ha scritto nel messaggio <7h7g0p$lt8$1...@nslave1.tin.it>...

>Tutto OK, funziona. Penso però che i timer di VB siano una schifezza.
>Controllando con un cronometro, quando il timer ha raggiunto 30
interventi,
>quindi 30 secondi, il cronometro segna 34 secondi!!
>
>Ciao
>Cesare Nicola
>

Esatto, sono una schifezza e non sono precisi, perchè in realtà l'intervallo
minimo è 55 millisecondi, o giù di li, e questa è la rosuluzione minima,
cioè l'intervallo deve essere multiplo di 55. Se fosse 55, il timer settato
a 1000 si ferma a 1045, questo vuol dire che sbaglia di 4.5 secondi ogni
100.....
...o almeno credo, attendo conferme

Cerca un timer preciso, ce ne sono in giro, credo anche sul sito comune.

Roal Zanazzi

unread,
May 11, 1999, 3:00:00 AM5/11/99
to
Leonardo Tagliavini ha scritto nel messaggio
<7h7mur$bq9$1...@pinco.nettuno.it>...

>
>Cesare Nicola ha scritto nel messaggio <7h7g0p$lt8$1...@nslave1.tin.it>...
>>Tutto OK, funziona. Penso però che i timer di VB siano una schifezza.
>>Controllando con un cronometro, quando il timer ha raggiunto 30
>>interventi, quindi 30 secondi, il cronometro segna 34 secondi!!
>>
>Esatto, sono una schifezza e non sono precisi, perchè in realtà
l'intervallo
>minimo è 55 millisecondi, o giù di li, e questa è la rosuluzione minima,
>cioè l'intervallo deve essere multiplo di 55. Se fosse 55, il timer settato
>a 1000 si ferma a 1045, questo vuol dire che sbaglia di 4.5 secondi ogni
>100.....
>...o almeno credo, attendo conferme
>

Non solo, ma l'evento Timer viene notificato dal sistema operativo tramite
messaggio WM_TIMER, che ha una priorita' scarsa... quindi tra l'effettivo
"tick" del timer e la ricezione del messaggio puo' passare qualche
millisecondo (dipende dal carico del sistema in quel momento), andando cosi'
ad aumentare l'errore.

>Cerca un timer preciso, ce ne sono in giro, credo anche sul sito comune.
>

Sul Sito Comune c'e' MMTimer, un OCX _con sorgenti VB_ che implementa un
timer preciso fino a 1ms, utilizzando i timers multimediali di Windows (non
quelli standard, usati dal controllo timer di VB).
Attenzione, pero' che i timers multimediali richiedono piu' risorse, e se
troppo sfruttati rischiano di rallentare il sistema.
Se lo usi e ti da problemi, puoi chiedere chiarimenti all'autore ;-)

--
Roal Zanazzi
z...@iol.it


Davide Greco

unread,
May 11, 1999, 3:00:00 AM5/11/99
to
se volessi convertire i secondi con un Format ?
mica devo calcolarmi quante ore, minuti, secondi sono trascorsi ?

impostando Timer-TimerIniziale ottengo i secondi trascorsi.... ma volevo
convertire questi in formato Ora valido ?

bye

Bepi Rospi

unread,
May 15, 1999, 3:00:00 AM5/15/99
to
Cesare Nicola ha scritto:

>
> Come posso fare per appoggiare il valore corrente di un timer ad una
> variabile? In altre parole, se un timer con Interval = 10000 (10 secondi)
> sta contando ed è arrivato a 6 secondi, io vorrei vedere nella variabile 6 o
> 6000 ( oppure 4 o 4000, visto che sono passati 4 secondi da quando ha
> iniziato a contare).
>
> Grazie
> Cesare Nicola

Io ho usato molto il controllo timer, e ho capito solo che il valore impostato
su
.interval significa "non accendere l'evento prima di", come dire che impostare
l'intervallo
a 500 msec, equivale alla certezza di eseguire il codice nell'evento timer con
frequenza
non superiore a 500 msec.

Bye
--
Bepi
mailto:be...@mwire.net


0 new messages