Visualizzare il tempo trascorso dall'ultimo avvio del sistema

Da Gambas-it.org - Wikipedia.

Per visualizzare il tempo trascorso dall'ultimo avvio del proprio sistema, sarà possibile utilizzare almeno un paio di modalità.


Lettura del file /proc/uptime mediante le sole funzioni di Gambas

Con questa modalità si andrà a leggere mediante le sole funzioni di Gambas il primo dato presente nel file: /proc/uptime. Otterremo qui questo risultato senza l'uso di Shell.

Nella routine principale apriremo il file "/proc/uptime", ponendolo sotto osservazione ai soli fini di far sollevare l'evento di lettura, e così di leggere con una nuova e diversa apertura del medesimo file i dati utili, ogni qual volta vi sono dati appunto da leggere.

Una lettura diretta del file nella routine "File_Read()" mediante la variabile di tipo File, ottenuta con l'istruzione Open della routine principale Sub Main(), non risulta possibile: seppure assenti errori, non vengono restituiti dati.


Mostriamo un esempio pratico:

Private fl As File


Public Sub Main()
 
' Apriamo il file solo per far sollevare l'evento di lettura ogni qual volta v'è qualcosa di nuovo da leggervi:
 fl = Open "/proc/uptime" For Read Watch

End



Public Sub File_Read()
 
 Dim s As String
 Dim ar As File

' Apriamo nuovamente il file, ma ora per la lettura e la conseguente raccolta dei dati:
  ar = Open "/proc/uptime" For Input

' Leggiamo solo i primi 7 byte del flusso:
  Input #ar, s

' Viene finalmente mostrato il risultato in console:
  Write #File.Out, s & "\r"

' Poniamo ad esempio un ritardo di 5 decimi di secondo, anche al fine di impedire un uso eccessivo della CPU:
  Sleep 0.05

  ar.Close
 
End


Uso della funzione gst_util_get_timestamp() di GStreamer

Quest'altra modalità prevede il semplice uso della funzoione esterna gst_util_get_timestamp() del API di GStreamer. Tale funzione esterna restituisce dei marcatori temporali, espressi in nanosecondi (miliardesimi di secondo) dall'avvio della corrente sessione del sistema, ed utilizzati solitamente per misurare degli intervalli di tempo.

Sarà ovviamente necessario richiamare nell'applicazione Gambas la libreria dinamica condivisa: "libgstreamer-1.0.so.0.204.0"

Mostriamo un semplicissimo esempio, nel quale verrà raccolto con un ciclo all'infinito il tempo (espresso in nanosecondi) trascorso dall'avvio della sessione di sistema:

Library "libgstreamer-1.0"

' GstClockTime gst_util_get_timestamp (void)
' Get a timestamp as GstClockTime to be used for interval measurements.
Private Extern gst_util_get_timestamp() As Long


Public Sub Main()

 Dim l As Long
 
  While True
    l = gst_util_get_timestamp()
    Write #File.Out, l & "\r"
  Wend

End