Creare un Cronometro

Da Gambas-it.org - Wikipedia.

Creare un cronometro all'interno di un ciclo che mostri il tempo trascorso dall'avvio del ciclo

Nel caso in esame, se si deve uscire dal ciclo all'accadere di una condizione, si potrà utilizzare il ciclo "Repeat...Until".

Mostriamo un esempio a riga di comando, nel quale premendo il tasto "Invio" sulla tastiera si determinerà l'uscita dal ciclo:

Private bo As Boolean


Public Sub Main()
 
 Dim tm As Date
 
' Prende l'orario nel momento dell'avvio del programma:
 tm = Now
 
 Repeat
' La funzione "DateDiff()" passa alla funzione "Time()" la differenza, espressa in millisecondi, tra il corrente orario e quello memorizzato all'avvio del programma.
' La funzione "Time()" passa alla funzione "CStr()" un valore temporale.
' La funzione "CStr()" consente di mostrare con "Write" in Console anche i millisecondi.
   Write "\r" & CStr(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)))
   Wait 0.001
 Until bo
 
' Consente di terminare il programma nel caso vi sia la subroutine "Application_Read()":
 Quit
 
End


Public Sub Application_Read()
 
 bo = True
 
End


Cronometro che mostra l'orario corrente, usando la funzione "Time"

Per realizzare un semplice cronometro che mostri l'orario attuale, comprensivo di ora, minuti, secondi, nonché di decimi, centesimi e millesimi di secondo, si può usare la funzione "Time".
Mostriamo un esempio in ambiente grafico, nel quale l'orario corrente sarà mostrato nell'intestazione di una finestra:

Public Sub Button1_Click()
 
 Do
   Me.Caption = Format(Time, "hh:nn:ss.uuu")   '[Nota 1]
   Wait 0.001
 Loop
 
End

Volendo, anziché usare un ciclo, sarà possibile usare anche la Classe "Timer".


Cronometro che calcola il tempo trascorso da un certo orario, usando la Classe Timer

In quest'altro esempio, invece, si ha un Cronometro adatto a visualizzare il tempo trascorso da un certo orario che sarà impostato e partirà cliccando su un "Button" posto sul "Form".
Si farà uso in questo esempio della Classe "Timer" (ma potrebbe essere utilizzato, ovviamente, anche un ciclo).

Private tempo As Date


Public Sub Button1_Click()

   With Timer1
     .Delay = 1
     .Start
   End With

' Assegna l'orario di questo istante:
   tempo = Time

End


Public Sub Timer1_Timer()

   TextBox1.Text = Format(CDate(Time - tempo), "hh:nn:ss.uuu")

End

Medesimo esempio, ma in un'applicazione a riga di comando ed usando un ciclo anziché un Timer

Per realizzare un cronometro in un'applicazione a riga di comando senza l'uso della Classe Timer, si prenderà l'orario all'avvio dell'applicazione medesima, e in un apposito ciclo si passerà alla funzione Date( ) la differenza fra l'orario corrente e quello iniziale.

 Public Sub Main()
 
 Dim tm As Date
 
' Prende l'orario iniziale:
 tm = Now
 
 Do
   Write "\rTempo: " & Date(0, 0, 0, 0, 0, 0, DateDiff(tm, Now, gb.Millisecond))
   Wait 0.001
 Loop
 
End


Note

[1] Questo tipo di formattazione del tempo restituisce:

  • hh = ora;
  • nn = minuti;
  • ss = secondi;
  • uuu = decimi, centesimi e millesimi di secondo.