Italian [B4i] Problema Classe Timer

HuZz

Member
Licensed User
Buongiorno a tutti,
premesso che mi son spulciato tutti i post relativi all'argomento del mio problema, non ho trovato soluzione a questa stranezza...
Sto sviluppando (legato al mio hobby) un cronometro, ma già in partenza ho riscontrato questo problema:
istanzio la classe Timer e inizializzo l'oggetto impostando 1 millisecondo l'intervallo...
se tanto mi da tanto, 1000 millisecondi fanno 1 secondo...
ho piazzato una label sulla pagina che viene aggiornata e mostra i millisecondi trascorsi... ma il dato visibile sulla label non rispecchia assolutamente il tempo realmente trascorso...
come mai? cosa sbaglio?

grazie a tutti
 

sirjo66

Well-Known Member
Licensed User
Longtime User
secondo me è sbagliato impostare il Timer a 1 millisecondo, troppo poco, può essere che non sempre riesca a far tutto in un millisecondo
 

HuZz

Member
Licensed User
Ciao grazie della risposta... si, mi son ulteriormente documentato ed è un fatto noto che il timer non sia preciso nel far scattare il tick a intervalli regolari. E la cosa si acuisce più viene ridotto l'intervallo.
Sto cercando un workaround per correggere dinamicamente l'errore che ad ogni tick si riscontra, ma non credo riuscirò a raggiungere un livello di precisione e/o affidabilità come si potrebbe raggiungere scrivendo direttamente con xCode. (o perlomeno non credo di esserne in grado io!)
Peccato... :(
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
questo perché , secondo me, sbagli approccio
invece di usare il timer , usa l'orologio, il primo si appoggia a codice macchina il secondo ad un quarzo dentro un integrato
usa si il timer per avere un evento, ma usa l'orologio per avere il tempo
imposti il timer a 10 o 50 millisecondi e all'evento tick leggi i millisecondi passati dal'orologio

Dim millisecond As Long=DateTime.now = millisecondi trascorsi dal 1 gennaio 1970

se vuoi un cronometro che aggiorni una label ogni millisecondo esatto e faccia anche altre operazioni abbandona B4A e JAVA essendo linguaggi di alto livello non possono assicurarti tale velocità di calcolo
 

HuZz

Member
Licensed User
Grazie LorZenzo per la risposta!
Alla fine, già ieri ho esattamente fatto cosi, infatti ora il mio cronometro funziona bene direi... Utilizzo un timer solo per mostrare il tempo che scorre. Per il resto uso l'orologio.
Ho anche utilizzato un'interessante classe di un utente qui del forum che ha implementato un sistema di aggiustamento dell'errore sul tick del timer, in modo che anche il passare dei secondi sia "abbastanza" preciso... (non si finisce mai di imparare!!!)

Per quanto riguarda la registrazione del tempo sul giro ho fatto come hai detto anche tu... allo start registro il datetime.now come riferimento per il tempo totale trascorso, ad ogni click sul pulsante imposto il nuovo riferimento e faccio la differenza rispetto al precedente, in modo da avere l'intervallo preciso in millisecondi.
Il tutto sembra abbastanza professionale :)
Ora il passo successivo, che era il mio obiettivo iniziale, è implementare il riconoscimento vocale per stoppare il giro... Nel modellismo RC, o tieni il telecomando, o premi il pulsante per segnare il tempo.... :D :D :D
 
Top