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...') |
|||
Riga 24: | Riga 24: | ||
Semplice esempio di uso in Gambas: | Semplice esempio di uso in Gambas: | ||
+ | Private Const EFAULT As Integer = 14 | ||
+ | Private Const EINVAL As Integer = 22 | ||
+ | |||
+ | |||
Public Struct nsleep | Public Struct nsleep | ||
tv_sec As Integer | tv_sec As Integer | ||
Riga 35: | Riga 39: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim | + | Dim err As Integer |
− | Dim | + | Dim nsReq, nsRem As New Nsleep |
+ | Dim errore$ As String | ||
+ | |||
− | <FONT color=Gray>' ''Imposta un ritardo di | + | <FONT color=Gray>' ''Imposta un ritardo di 300000000 nanosecondi (300000000 miliardesimi di secondo = 0,3 secondi):''</font> |
− | With | + | With nsReq |
.tv_sec = 0 | .tv_sec = 0 | ||
− | .tv_nsec = | + | .tv_nsec = 300000000 |
End With | End With | ||
− | + | ||
− | <FONT color=Gray>' ''Sospende l'esecuzione per | + | <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 !" | |
+ | 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 delle 07:09, 9 set 2014
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:
Private Const EFAULT As Integer = 14 Private Const EINVAL As Integer = 22 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 err As Integer Dim nsReq, nsRem As New Nsleep 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