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

Da Gambas-it.org - Wikipedia.
Riga 46: Riga 46:
  
  
===Uso della funzione ''gst_util_get_timestamp()'' di GStreamer===
+
===Uso della libreria esterna 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 di seguito due modalità utilizzando alcune funzioni della libreria esterna di ''GStreamer''. Sarà ovviamente necessario richiamare nell'applicazione Gambas la libreria dinamica condivisa: "''libgstreamer-1.0.so.0.204.0''"
 +
 
 +
 
 +
'''1<SUP>a</sup> modalità:
 +
Questa modalità prevede l'uso della funzione 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.
  
 
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:
 
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:
Riga 66: Riga 69:
 
     l = gst_util_get_timestamp()
 
     l = gst_util_get_timestamp()
 
     Write #File.Out, l & "\r"
 
     Write #File.Out, l & "\r"
 +
  Wend
 +
 +
'''End'''
 +
 +
 +
 +
'''2<SUP>a</sup> modalità:
 +
Quest'altra modalità prevede l'uso delle funzioni esterne ''gst_system_clock_obtain()'' e ''gst_clock_get_time()'' del API di GStreamer.
 +
 +
Anche in questa modalità verrà raccolto con un ciclo all'infinito il tempo (espresso in ''nanosecondi'') trascorso dall'avvio della sessione di sistema:
 +
Library "libgstreamer-1.0"
 +
 +
<FONT Color=gray>' ''GstClock * gst_system_clock_obtain (void)''
 +
' ''Get a handle to the default system clock.''</font>
 +
Private Extern gst_system_clock_obtain() As Pointer
 +
 +
<FONT Color=gray>' ''GstClockTime gst_clock_get_time (GstClock *clock)''
 +
' ''Get the current time of the given clock.''</font>
 +
Private Extern gst_clock_get_time(GstClock As Pointer) As Long
 +
 
 +
 +
'''Public''' Sub Main()
 +
 +
  Dim clock, id As Pointer
 +
  Dim tempus As Long
 +
 +
  clock = gst_system_clock_obtain()
 +
 
 +
  While True
 +
    tempus = gst_clock_get_time(clock)
 +
    Write #File.Out, tempus & "\r"
 
   Wend
 
   Wend
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 08:15, 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 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 libreria esterna di GStreamer

Mostriamo di seguito due modalità utilizzando alcune funzioni della libreria esterna di GStreamer. Sarà ovviamente necessario richiamare nell'applicazione Gambas la libreria dinamica condivisa: "libgstreamer-1.0.so.0.204.0"


1a modalità: Questa modalità prevede l'uso della funzione 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.

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


2a modalità: Quest'altra modalità prevede l'uso delle funzioni esterne gst_system_clock_obtain() e gst_clock_get_time() del API di GStreamer.

Anche in questa modalità verrà raccolto con un ciclo all'infinito il tempo (espresso in nanosecondi) trascorso dall'avvio della sessione di sistema:

Library "libgstreamer-1.0"

' GstClock * gst_system_clock_obtain (void)
' Get a handle to the default system clock.
Private Extern gst_system_clock_obtain() As Pointer

' GstClockTime gst_clock_get_time (GstClock *clock)
' Get the current time of the given clock.
Private Extern gst_clock_get_time(GstClock As Pointer) As Long
 

Public Sub Main()

 Dim clock, id As Pointer
 Dim tempus As Long

  clock = gst_system_clock_obtain()
 
  While True
    tempus = gst_clock_get_time(clock)
    Write #File.Out, tempus & "\r"
  Wend

End