Italian Timer autostop

Antonio67

Member
Ciao a tutti,volevo fare una domanda:ho un'app con un timer che lo fermo dopo un determinato tempo (diciamo 6 secondi) e volevo sapere se ce un'altro metodo oltre quello che uso io, e cioè:
Sub stop
dim x as int
x=x+1
If x=60 Then
Timer1.Enabled=False
x=0
End If

End Sub

Grazie
 

Gianni M

Well-Known Member
Licensed User
Longtime User
in quella Sub Stop il valore di x non sarà mai superiore a 1 !!!???
 

LucaMs

Expert
Licensed User
Longtime User
in quella Sub Stop il valore di x non sarà mai superiore a 1 !!!???
Esatto, perché reinizializza x all'interno della routine.
Dovresti usare una variabile globale (magari non chiamandola X )

Cmq, mi sa tanto che è proprio il concetto ad essere sbagliato:
Ciao a tutti,volevo fare una domanda:ho un'app con un timer che lo fermo dopo un determinato tempo (diciamo 6 secondi)
Vuoi far partire un timer dopo 6 secondi? Non è certo quello il modo, dato che x = 60 non significa 60 secondi.

Non sono sicuro di ciò che vuoi fare, ma se vuoi attivare un timer dopo che siano trascorsi 6 secondi, devi semplicemente usare due timer, il primo impostato con Interval = 6000 (cioè i 6 secondi) e al suo tick, lo disabiliti e abiliti l'altro.

Ricorda che i timer vanno dichiarati nella Process_Globals.
 

Antonio67

Member
Ciao luca. No non voglio far ripartire il timer dopo 6 secondi ma fermarlo dopo 6 secondi. Il codice mio funziona, solo che volevo sapere se cera un altro metodo. Tu come faresti?
 

LucaMs

Expert
Licensed User
Longtime User
Quindi, diciamo che tu imposti il timer interval a 1000 (1 secondo), nella routine evento Tick esegui qualcosa ma se è stata eseguita 6 volte (6 secondi) vuoi disattivare il timer?
Se è così, puoi usare il metodo della X (nome da cambiare) dichiarata però nella Process_Globals oppure memorizzare in una variabile (sempre Process) l'orario in cui abiliti il timer (tipo Dim AvvioTimer As Long - AvvioTimer = DateTime.Now) e confrontarlo con quello nella routine Tick (If DateTime.Now - AvvioTimer >= 6000 Then Timer1.Enabled = False).

Se Invece la routine Tick deve scattare una solta volta dopo 6 secondi, devi semplicemente impostare Timer1.Interval = 6000 (o nell'inizializzazione) e disabilitarlo nella Tick (Timer1.Enabled = False)
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Ciao

È possibile creare un servizio e chiamare ogni volta x.

È anche possibile fare questo ciclo.
B4X:
log("Per attendere 5 secondi" & sleep(5000))



Public Sub Sleep(milisegundos As Long)
   Dim Actual As Int
   Dim t As Int
   
   Actual = DateTime.Now
   t= Actual
   
   Do Until (t-Actual) >= milisegundos
    t= DateTime.Now
     DoEvents
  Loop  

End Sub

Saluti
 

Antonio67

Member
Ciao, intressante anche se per il momento trovo piu facile da eseguire:
dim x as int
x=x +1
If x=60 then
Timer1..enabled=false
End if
Come vedi così non solo mi funziona ma il codice è anche piu corto, comunque grazie lo provero'
 

LucaMs

Expert
Licensed User
Longtime User
Non preoccuparti che il codice sia "piu corto"; è importante che funzioni (ovviamente), che sia ben "organizzato" e facilmente leggibile.

Il codice corto, più che altro l'eseguibile corto, può essere necessario solo in pochi sw, ad esempio un cronometro. Inoltre, appunto, non è detto che se il codice che scrivi è lungo lo sia anche l'eseguibile; ad esempio, se il nome di una variabile è X ma decido di cambiarlo e la chiamo CoordinataOrizzontale, l'eseguibile avrà lo stesso numero di byte.

Comunque, il codice proposto da @bgsoft (sconsigliato da Erel perché bloccherebbe il thread principale, anche se io non capisco il motivo, dato che si usa DoEvents; molto probabilmente il DoEvents non funziona come in VB.Net, ad esempio) serve per fare delle pause, non per il tuo scopo.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User

Sì, hai ragione su Erel. Se non mettete questo codice in un servizio o un modulo di classe funziona perfettamente, ce l'ho in molti activitys e non mi ha dato problemi.

Saluti
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…