C Utilizzo della funzione nanosleep

C Utilizzo della funzione nanosleep
La funzione Nanosleep è un metodo del sistema UNIX. Lo scopo di Nanosleep è quello di sospendere o mettere in pausa l'esecuzione di un particolare programma per un periodo definito. Questo articolo ti aiuterà a capire e ti darà una migliore comprensione della funzione di nanosleep ()."Un'altra funzione è" sonno ", ma faremo uso di nanosleep () perché possiamo fornire nanosecondi per la pausa/tempo di sonno.

Sintassi:

La figura sopra indica la sintassi della funzione nanosleep ed è definita nel file di intestazione.

Rqtp: RQTP è un puntatore a TimesPec che indica l'intervallo di tempo per il quale l'utente desidera sospendere o mettere in pausa il thread/programma.

RMTP: RMTP è un puntatore a TimesPec che indica che la funzione ha memorizzato il periodo che rimane nell'intervallo.

La struttura TimesPec viene utilizzata per identificare gli intervalli di tempo a livello di nanosecondi.

Scopo di usare nanosleep () in c

Nanosleep è un'interfaccia del sistema operativo portatile. È una chiamata conforme al sistema per sospendere un determinato thread dell'esecuzione di un programma per un periodo di tempo specifico. Funzioni simili sono disponibili anche per lo stesso scopo. Il sonno è uno di quei processi che richiedono pochi secondi per sospendere il programma, ma si dice che fornisca sospensioni a bassa risoluzione. Pertanto, la funzione di nanosleep concede l'autorizzazione all'utente a fornire il tempo di sonno in nanosecondi per una migliore precisione.

In precedenza, il metodo nanosleep () era utilizzato per gestire pause fino a 2 ms se chiamato dai thread programmati, ma richiederebbe una maggiore precisione per gestire hardware o applicazioni critiche temporali o.

Valore di ritorno

  1. Se il programma è stato eseguito correttamente, tornerà 0.
  2. Se il programma è stato eseguito senza successo o non è riuscito ed è stato interrotto, restituirà -1.

Errori

  1. Efault: Tipo di errore efault si verifica in caso di problemi nella copia di informazioni dallo spazio utenti.
  2. Eintr: Il tipo di errore Eintr si verifica quando si verifica un'interruzione nella pausa da parte di un segnale che è stato consegnato al thread.
  3. Einval: Se il valore dei nanosecondi nel TimesPec di struct non è compreso tra 0 e 999999999 o ha un valore negativo, lancerà questo errore.

Se l'archite determinata in RQTP è qualcosa di diverso da una differenza precisa dell'orologio nascosto granularità, verrà raccolto. Inoltre, potrebbe esserci un rinvio in seguito se il resto del lavoro è terminato prima che la CPU possa eseguire nuovamente la stringa di chiamata.

Poiché il metodo che nanosleep non funziona per un periodo di tempo relativo, tende ad essere rischioso se il metodo viene chiamato ripetutamente dopo aver affrontato l'impulso o le interruzioni dei segnali, poiché il tempo tra interruzioni del segnale e la chiamata di riavvio causerà un leggero spostamento quando il sonno causerà un leggero spostamento finiture. Usa clock nanosleep (2) con un valore temporale per stare lontano da questo problema.

Nanosleep () dovrebbe quantificare il tempo con l'orologio in tempo reale dell'avversario, secondo Posix.1. Linux, ancora una volta, utilizza l'orologio monotonico per monitorare il tempo. Questo è presumibilmente irrilevante perché il posix.1 clock settime (2) esprime in particolare che i cambiamenti spasmodici nell'orologio in tempo reale non dovrebbero influenzare il nanosleep ().

Se impostiamo il valore dell'orologio in tempo reale tramite setTime (2). Ciò non avrà alcun effetto sui programmi che sono bloccati e in attesa in coda per un tempo relativo in base a questo orologio.

Esempio in c

Prima di tutto, abbiamo dovuto inizializzare la libreria che ha la struttura di un puntatore temporale di richiesta TimesPec e un puntatore temporale Timespec rimanente. Ci sono due puntatori che memorizzano il tempo in cui l'utente desidera sospendere il programma e anche il tempo rimanente in cui il tempo di intervallo di arresto ha lasciato.

Dopodiché, iniziamo il nostro corpo principale e dobbiamo creare due oggetti TimesPec che conterranno la nostra richiesta e il tempo rimanente. Potremmo assegnare qualsiasi valore a questi due oggetti, ma nel nostro caso abbiamo scelto 3 secondi e 500 nanosecondi.

Ora passeremo gli indirizzi degli oggetti creati a Nanosleep, poiché puoi osservare nella riga numero 10. Verificheremo anche se il programma ha avuto successo o fallito osservando il valore di ritorno del metodo Nanosleep.

Il programma di cui sopra stamperà il seguente output se viene eseguito correttamente:

Se modifichiamo il valore di risposta in 1, l'esecuzione del programma fallirà e produriamo il seguente errore come output.

Ora, se vogliamo eseguire il seguente codice sul nostro terminale GCC. Salveremo prima il nostro file come principale.C e quindi utilizzare il seguente comando sul tuo terminale per eseguire il programma: “GCC-Wall Main.c-o ". Un muro significa abilitare tutti i messaggi di avviso durante l'esecuzione del nostro programma.

Bug

L'attuale esecuzione di nanosleep () dipende dal tipico componente dell'orologio bit, che ha un obiettivo di 1/hz s. Lungo queste linee, il nanosleep () si ferma in modo coerente per il tempo predefinito, ma può richiedere fino a 10 ms più a lungo di quanto indicato fino a quando l'interazione diventa ancora una volta eseguibile. Per una spiegazione simile, il valore restituito in caso di un segnale trasmesso in *RMTP ed è normalmente regolato alla seguente differenza maggiore di 1/Hz S.

Fondamento logico:

È normale sospendere l'esecuzione di una stringa per un po 'di tempo per esaminare la situazione con un occhio verso il lavoro non coinvolgente. Innumerevoli necessità reali possono essere soddisfatte con una semplice estensione del sonno () che dà un obiettivo migliore.

Nel posix.1-1990 Norm e SVR4, è possibile eseguire tale pratica quotidiana, tranne la ricorrenza del risveglio è limitata dall'obiettivo delle funzioni di allarme () e sleep (). È probabile che scriva un tale standard in 4.3 BSD durante l'utilizzo di nessun stockpilazione statica e non risparmiare uffici quadro. Anche se è possibile comporre una funzione con utilità comparabile al sonno () utilizzando il resto delle capacità Timer_* (), tale capacità richiede l'utilizzo dei segni e la prenotazione di un numero significativo. Questo volume di IEEE STD 1003.1-2001 necessita che il nanosleep () sia non meddlesome se i segni funzionano.

Il lavoro di nanosleep () restituirà un valore di 0 su progressi e - 1 in caso di fallimento, o di nuovo ogni volta che interferito con. Quest'ultima caso di opzione non è altrettanto uguale al sonno (). Ciò è stato fatto alla luce del fatto che il tempo rimanente viene restituito utilizzando un puntatore della struttura della contesa, RMTP, piuttosto che come un modo per riportare l'approvazione.

Conclusione

Il focus di questa ricerca era aiutarti a sviluppare una migliore comprensione del metodo nanosleep (). Per avere una buona presa di metodi come il nanosleep è necessario illustrarli con l'esempio più semplice. Abbiamo fatto del nostro meglio per fornire il meglio di informazioni come bug, logiche, esempi, errori e sinossi. In modo da poter continuare a migliorare l'interpretazione e la riusabilità del tuo codice. Abbiamo superato una semplice spiegazione della sintassi. L'articolo ti aiuterà a guadagnare rapidamente un'interpretazione approfondita di come usare il nanosleep () come metodo. Per sfruttare molto meglio il metodo, le considerazioni come variabili sono state affrontate e ben spiegate per gli utenti.