Italian Array di Timer, come sapere l'evento di chi è?

Dominex

Active Member
Licensed User
Longtime User
Ho un problema, non so come capire quale evento Timer avviene quanto i Timer in questione sono in un Array.

B4X:
Sub Process_Globals
   Dim t0,t1,t2,t3,t4 As Timer
   Dim Timer1() As Timer
End Sub

Sub Pippo
   Timer1= Array As Timer (t0,t1,t2,t3,t4)
   For c = 0 To 4
      Timer1(c).Initialize("Timer1",SetIntervallo)
      Timer1(c).Enabled = True
   Next
End Sub

Con il codice qui sotto non riesco a sapere di chi è l'evento, forse non si può fare perchè il Timer è primo del ".Tag"?
B4X:
Sub Timer1_Tick
   Dim Send As Timer
   Send = Sender
    msgbox (Send,"")
End Sub

Con
 

Dominex

Active Member
Licensed User
Longtime User
In verità uso già 2 timer a cui volevo aggiungerne altri per funzioni diverse, non sapevo che potessero creare i problemi che mi hai illustrato.

Comunque credo di aver appena trovato la soluzione al problema usando in tutto soltanto 2 timer. Il primo è fondamentale dove contano anche i millesimi di secondo perchè l'intervallo si riduce ad ogni ciclo.

Il secondo invece è meno importante in termini di millisecondi, così potrei ad esempio impostarlo con un intervallo di 250 dove all'interno tramite delle variabili in array creo io gli eventi utilizzando il DateTime.Now.

Ora ci provo. Grazie comunque dell'aiuto.
 

Jost aus Soest

Active Member
Licensed User
Longtime User
Con il codice qui sotto non riesco a sapere di chi è l'evento, forse non si può fare perchè il Timer è primo del ".Tag"?
B4X:
Sub Timer1_Tick
   Dim Send As Timer
   Send = Sender
    msgbox (Send,"")
End Sub

L'idea e' giusta, dobbiamo solo trovare una sostituzione x ".Tag".
Spesso e' possibile modificare l'intervallo un po', per capire quale Timer ha causato l'evento:
B4X:
'Init alcuni Timer:
t0.Interval = 1000 + 0 'ID: 0
t1.Interval = 1000 + 1 'ID: 1
t2.Interval = 1000 + 2 'ID: 2
'...

Sub Timer_Tick

  Dim t As Timer
  Dim ID As Int

  t = Sender
  ID = t.Interval - 1000 'calcolare l'ID
  MsgBox ("Timer# " & ID, "")

End Sub
 
Last edited:

Dominex

Active Member
Licensed User
Longtime User
L'idea e' giusta, dobbiamo solo trovare una sostituzione x ".Tag".
Spesso e' possibile modificare l'intervallo un po', per capire quale Timer ha causato l'evento:
B4X:
'Init alcuni Timer:
t0.Interval = 1000 + 0 'ID: 0
t1.Interval = 1000 + 1 'ID: 1
t2.Interval = 1000 + 2 'ID: 2
'...

Sub Timer_Tick

  Dim t As Timer
  Dim ID As Int

  t = Sender
  ID = t.Interval - 1000 'calcolare l'ID
  MsgBox ("Timer# " & ID, "")

End Sub

Grazie molte del tuo suggerimento, ero però giunto anch'io alla stessa conclusione. Timo però, mi ha fatto riflettere sul fatto se ho davvero bisogno di così tanti Timer. Penso di aver comunque trovato la soluzione che fa al caso mio.

Dato che i Timer dell'array che volevo creare avrebbero un intervallo che comunque per tutti sarebbe un multiplo di 250 ad esempio, creerò un solo Timer con intervallo di 250 appunto dove grazie alla funzione DateTime.Now potrò gestite tutti questi SimilTimer che voglio, anche con intervalli diversi purchè sempre multipli di 250 millisecondi.
 

Dominex

Active Member
Licensed User
Longtime User
Anche a me manca il vecchio VB! :cool:

In B4A esiste la Floor-Funzione:
B4X:
x = Floor(y + z) 'arrotondare

Una VB-like funzione:
B4X:
Sub CInt(o As Object) As Int
  Return Floor(o)
End Sub

Floor è perfetta! Grazie.
 
Top