Differenze tra le versioni di "Nanosleep()"
Da Gambas-it.org - Wikipedia.
(6 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 *__requested_time, struct timespec *__remaining) | + | 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). | ||
Riga 8: | Riga 8: | ||
__syscall_slong_t 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 | + | 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 | + | * 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 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 color=Gray>' ''int nanosleep(const struct timespec *req, struct timespec *rem)'' |
− | Private <FONT color=#B22222> | + | ' ''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() | |
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 | |
− | + | .tv_sec = 0 | |
− | + | .tv_nsec = 300000000 | |
− | + | 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> | |
− | + | 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 |
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