Differenze tra le versioni di "Visualizzare il tempo trascorso dall'ultimo avvio del sistema"

Da Gambas-it.org - Wikipedia.
Riga 42: Riga 42:
 
   
 
   
 
  <FONT color=gray>' ''Poniamo ad esempio un ritardo di 5 decimi di secondo, anche al fine di impedire un uso eccessivo della CPU:''</font>
 
  <FONT color=gray>' ''Poniamo ad esempio un ritardo di 5 decimi di secondo, anche al fine di impedire un uso eccessivo della CPU:''</font>
   Sleep 0.01
+
   Sleep 0.05
 
   
 
   
 
   ar.Close
 
   ar.Close

Versione delle 02:46, 11 set 2015

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


Lettura del file /proc/uptime

Con questa modalità si andrà a leggere mediante l'aiuto di un Puntatore 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 p As Pointer
 Dim ar As File

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

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

' Poiché dopo i 7 caratteri vi è un byte di valore zero (Nul), ci serviamo del "Puntatore" per escludere tutto ciò che v'è da quel valore zero in poi:
  p = VarPtr(s)
 
' Viene finalmente mostrato il risultato in console:
  Write #File.Out, String@(p) & "\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 nano secondi 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:

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
 
  l = gst_util_get_timestamp()

  Print l

End