Differenze tra le versioni di "Nanosleep()"

Da Gambas-it.org - Wikipedia.
 
(7 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 secondo).
 
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 timespec
 
  Public Struct timespec
 
   tv_sec As Long
 
   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)''
 +
' ''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>"
 
  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:
 +
Library "libc:6"
 +
 
  Private Const EFAULT As Integer = 14
 
  Private Const EFAULT As Integer = 14
 
  Private Const EINVAL As Integer = 22
 
  Private Const EINVAL As Integer = 22
 
 
   
 
   
 
  Public Struct timespec
 
  Public Struct timespec
Riga 33: Riga 34:
 
  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 Timespec, rem As Timespec) 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 err As Integer
 
   Dim err As Integer
 
   Dim nsReq, nsRem As New Timespec
 
   Dim nsReq, nsRem As New Timespec
 
   Dim errore$ As String
 
   Dim errore$ As String
 
 
   
 
   
 
  <FONT color=Gray>' ''Imposta un ritardo di 300000000 nanosecondi (300000000 miliardesimi di secondo = 0,3 secondi):''</font>
 
  <FONT color=Gray>' ''Imposta un ritardo di 300000000 nanosecondi (300000000 miliardesimi di secondo = 0,3 secondi):''</font>
  With nsReq
+
  With nsReq
    .tv_sec = 0
+
  .tv_sec = 0
    .tv_nsec = 300000000
+
  .tv_nsec = 300000000
  End With
+
  End With
 
    
 
    
 
 
 
  <FONT color=Gray>' ''Sospende l'esecuzione per 300000000 nanosecondi:''</font>
 
  <FONT color=Gray>' ''Sospende l'esecuzione per 300000000 nanosecondi:''</font>
  err = <FONT color=#B22222>nanosleep(nsReq, Null)</font>
+
  err = <FONT color=#B22222>nanosleep(nsReq, Null)</font>
 
   
 
   
  If err = 0 Then
+
  If err = 0 Then
 
     Print "Chiamata alla funzione 'nanosleep()' riuscita !"
 
     Print "Chiamata alla funzione 'nanosleep()' riuscita !"
 
   Else
 
   Else
Riga 66: Riga 66:
 
   Endif
 
   Endif
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 14:06, 13 giu 2024

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