Differenze tra le versioni di "Nanosleep()"

Da Gambas-it.org - Wikipedia.
(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...')
 
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
La funzione della libreria di C
 
La funzione della libreria di C
  int nanosleep(const struct timespec *req, struct timespec *rem);
+
  int '''nanosleep''' (const struct timespec *__requested_time, struct timespec *__remaining)
sospende l'esecuzione del programma per intervalli di ''nanosecondi'' (miliardesimi di secondi).
+
sospende l'esecuzione del programma per intervalli di ''nanosecondi'' (miliardesimi di secondo).
  
 
Questa funzione prevede come parametri una ''Struttura'' per specificare gli intervalli di tempo con una precisione al ''nanosecondo'':
 
Questa funzione prevede come parametri una ''Struttura'' per specificare gli intervalli di tempo con una precisione al ''nanosecondo'':
 
  struct timespec {
 
  struct timespec {
     time_t tv_sec;       /* secondi */
+
     __time_t tv_sec;                   /* secondi */
     long   tv_nsec;      /* nanosecondi */
+
     __syscall_slong_t   tv_nsec;      /* nanosecondi */
 
  };
 
  };
Il parametro dei ''nanosecondi'' va espresso in un ambito compreso fra 0 e 999999999.
+
Il parametro dei ''nanosecondi'' va espresso in un ambito compreso fra <FONT color=#B22222>0</font> e <FONT color=#B22222>999999999</font>.
  
 
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.
 
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.
 
<BR>Pertanto, in Gambas utilizzeremo il primo parametro (''*req'') della Struttura ''timespec'', nonché dichiareremo:
 
<BR>Pertanto, in Gambas utilizzeremo il primo parametro (''*req'') della Struttura ''timespec'', nonché dichiareremo:
* la predetta Struttura ''timespec'':
+
* la predetta Struttura ''timespec'' :
  Public Struct nsleep
+
  Public Struct timespec
   tv_sec As Integer
+
   tv_sec As Long
 
   tv_nsec As Long
 
   tv_nsec As Long
 
  End Struct
 
  End Struct
* la funzione ''nanosleep()'' con ''Extern'' e la libreria di C: libc.so.6, nella quale la funzione è contenuta:
+
* la funzione "nanosleep()" con ''Extern'' e la libreria di C: libc.so.6, nella quale la funzione è contenuta:
  <FONT color=Gray>' ''int nanosleep(const struct timespec *req, struct timespec *rem);''</font>
+
  <FONT color=Gray>' ''int nanosleep(const struct timespec *req, struct timespec *rem)''
  Private <FONT color=#B22222>Extern nanosleep</font>(req As Nsleep, rem As Nsleep) As Integer In "<FONT color=#B22222>libc:6</font>"
+
' ''Pause execution for a number of nanoseconds.''</font>
 
+
  Private <FONT color=#B22222>Extern nanosleep</font>(req As Timespec, rem As Timespec) As Integer In "<FONT color=#B22222>libc:6</font>"
  
  
 
Semplice esempio di uso in Gambas:
 
Semplice esempio di uso in Gambas:
  Public Struct nsleep
+
Library "libc:6"
   tv_sec As Integer
+
 +
Private Const EFAULT As Integer = 14
 +
Private Const EINVAL As Integer = 22
 +
 +
  Public Struct timespec
 +
   tv_sec As Long
 
   tv_nsec As Long
 
   tv_nsec As Long
 
  End Struct
 
  End Struct
 
   
 
   
  <FONT color=Gray>' ''int nanosleep(const struct timespec *req, struct timespec *rem);''</font>
+
  <FONT color=Gray>' ''int nanosleep(const struct timespec *req, struct timespec *rem)''
  Private <FONT color=#B22222>Extern nanosleep</font>(req As Nsleep, rem As Nsleep) As Integer In "<FONT color=#B22222>libc:6</font>"
+
' ''Pause execution for a number of nanoseconds.''</font>
 +
  Private Extern <FONT color=#B22222>nanosleep</font>(req As Timespec, rem As Timespec) As Integer
 
   
 
   
 
   
 
   
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim i As Integer
+
   Dim err As Integer
   Dim ns As New Nsleep
+
   Dim nsReq, nsRem As New Timespec
 +
  Dim errore$ As String
 
   
 
   
  <FONT color=Gray>' ''Imposta un ritardo di 999 nanosecondi (999 miliardesimi di secondo):''</font>
+
  <FONT color=Gray>' ''Imposta un ritardo di 300000000 nanosecondi (300000000 miliardesimi di secondo = 0,3 secondi):''</font>
  With ns
+
  With nsReq
    .tv_sec = 0
+
  .tv_sec = 0
    .tv_nsec = 999
+
  .tv_nsec = 300000000
  End With
+
  End With
 
    
 
    
  While True
+
  <FONT color=Gray>' ''Sospende l'esecuzione per 300000000 nanosecondi:''</font>
  <FONT color=Gray>' ''Sospende l'esecuzione per 999 nanosecondi:''</font>
+
  err = <FONT color=#B22222>nanosleep(nsReq, Null)</font>
    <FONT color=#B22222>nanosleep(ns, Null)</font>
+
    Inc i
+
  If err = 0 Then
    Print i
+
    Print "Chiamata alla funzione 'nanosleep()' riuscita !"
  Wend
+
  Else
 +
    Select Case err
 +
      Case EFAULT
 +
        errore$ = "Problema con la copia di informazioni da spazio utente !"
 +
      Case EINVAL
 +
        errore$ = "Il valore nel membro 'tv_nsec' non rientra nell'ambito 0 - 999999999, oppure 'tv_sec' è negativo !"
 +
    End Select
 +
    Error.Raise("Chiamata alla funzione 'nanosleep()' fallita:\n" & errore$)
 +
  Endif
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione attuale delle 12:17, 4 set 2022

La funzione della libreria di C

int nanosleep (const struct timespec *__requested_time, struct timespec *__remaining)

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

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 */
   __syscall_slong_t   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 timespec
  tv_sec As Long
  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)
' Pause execution for a number of nanoseconds.
Private Extern nanosleep(req As Timespec, rem As Timespec) As Integer In "libc:6"


Semplice esempio di uso in Gambas:

Library "libc:6"

Private Const EFAULT As Integer = 14
Private Const EINVAL As Integer = 22

Public Struct timespec
  tv_sec As Long
  tv_nsec As Long
End Struct

' int nanosleep(const struct timespec *req, struct timespec *rem)
' Pause execution for a number of nanoseconds.
Private Extern nanosleep(req As Timespec, rem As Timespec) As Integer


Public Sub Main()

 Dim err As Integer
 Dim nsReq, nsRem As New Timespec
 Dim errore$ As String

' Imposta un ritardo di 300000000 nanosecondi (300000000 miliardesimi di secondo = 0,3 secondi):
 With nsReq
  .tv_sec = 0
  .tv_nsec = 300000000
 End With
 
' Sospende l'esecuzione per 300000000 nanosecondi:
 err = nanosleep(nsReq, Null)

 If err = 0 Then
   Print "Chiamata alla funzione 'nanosleep()' riuscita !"
 Else
   Select Case err
     Case EFAULT
       errore$ = "Problema con la copia di informazioni da spazio utente !"
     Case EINVAL
       errore$ = "Il valore nel membro 'tv_nsec' non rientra nell'ambito 0 - 999999999, oppure 'tv_sec' è negativo !"
   End Select
   Error.Raise("Chiamata alla funzione 'nanosleep()' fallita:\n" & errore$)
 Endif

End