Nanosleep()

Da Gambas-it.org - Wikipedia.
Versione del 9 set 2014 alle 02:44 di Vuott (Discussione | contributi) (Creata pagina con 'La funzione della libreria di C int nanosleep(const struct timespec *req, struct timespec *rem); sospende l'esecuzione del programma per intervalli di ''nanosecondi'' (miliar...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

La funzione della libreria di C

int nanosleep(const struct timespec *req, struct timespec *rem);

sospende l'esecuzione del programma per intervalli di nanosecondi (miliardesimi di secondi).

Questa funzione prevede come parametri una Struttura per specificare gli intervalli di tempo con una precisione al nanosecondo:

struct timespec {
   time_t tv_sec;        /* secondi */
   long   tv_nsec;       /* nanosecondi */
};

Il parametro dei nanosecondi va espresso in un ambito compreso fra 0 e 999999999.

Con particolare riferimento alla suddetta Struttura timespec va rilevato che nanosleep() sospende l'esecuzione del programma almeno tutto il tempo specificato nel membro *req della Struttura.
Pertanto, in Gambas utilizzeremo il primo parametro (*req) della Struttura timespec, nonché dichiareremo:

  • la predetta Struttura timespec:
Public Struct nsleep
  tv_sec As Integer
  tv_nsec As Long
End Struct
  • la funzione nanosleep() con Extern e la libreria di C: libc.so.6, nella quale la funzione è contenuta:
' int nanosleep(const struct timespec *req, struct timespec *rem);
Private Extern nanosleep(req As Nsleep, rem As Nsleep) As Integer In "libc:6"


Semplice esempio di uso in Gambas:

Public Struct nsleep
  tv_sec As Integer
  tv_nsec As Long
End Struct

' int nanosleep(const struct timespec *req, struct timespec *rem);
Private Extern nanosleep(req As Nsleep, rem As Nsleep) As Integer In "libc:6"


Public Sub Main()

 Dim i As Integer
 Dim ns As New Nsleep

' Imposta un ritardo di 999 nanosecondi (999 miliardesimi di secondo):
  With ns
   .tv_sec = 0
   .tv_nsec = 999
  End With
 
  While True
' Sospende l'esecuzione per 999 nanosecondi:
    nanosleep(ns, Null)
    Inc i
    Print i
  Wend

End