C Utilisation de la fonction nanoslee

C Utilisation de la fonction nanoslee
La fonction Nanosleep est une méthode du système Unix. Le but de Nanosleep est de suspendre ou de suspendre l'exécution d'un programme particulier pour une période définie. Cet article vous aidera à comprendre et à vous donner une compréhension améliorée de «Comment utiliser la fonction Nanosleep ().«Une autre fonction est« sommeil », mais nous utiliserons Nanosleep () car nous pouvons fournir des nanosecondes pour la pause / le temps de sommeil.

Syntaxe:

La figure ci-dessus indique la syntaxe de la fonction Nanosleep et elle est définie dans le fichier d'en-tête.

RQTP: RQTP est un pointeur vers Timespec qui indique l'intervalle de temps pour lequel l'utilisateur souhaite suspendre ou suspendre le thread / le programme.

RMTP: RMTP est un pointeur vers Timespec qui indique que la fonction a stocké la période qui reste dans l'intervalle.

La structure TimeSpec est utilisée pour identifier les intervalles de temps au niveau de la nanoseconde.

But d'utiliser nanosleep () en c

Nanosleep est une interface de système d'exploitation portable. Il s'agit d'un appel conforme au système pour suspendre un thread particulier de l'exécution d'un programme pendant un temps spécifique. Des fonctions similaires sont également disponibles dans le même but. Le sommeil est l'un de ces processus qui prend quelques secondes pour suspendre le programme, mais il est censé livrer une suspension à basse résolution. Par conséquent, la fonction Nanosleep donne l'autorisation à l'utilisateur de fournir le temps de sommeil en nanosecondes pour une meilleure précision.

Auparavant, la méthode nanosleep () a été utilisée pour gérer des pauses allant jusqu'à 2 ms lorsqu'elles sont appelées à partir des fils planifiés, mais il faudrait plus de précision pour gérer le matériel ou les applications critiques.

Valeur de retour

  1. Si le programme a été exécuté avec succès, il retournera 0.
  2. Si le programme a été exécuté sans succès ou a échoué et a été interrompu, il retournera -1.

les erreurs

  1. Efault: Le type d'erreur de l'éfault se produit s'il y a un problème dans la copie des informations de l'espace utilisateur.
  2. Eintr: Le type d'erreur d'Eintr se produit lorsqu'il y a une interruption de la pause par un signal qui a été livré au fil.
  3. Einval: Si la valeur des nanosecondes dans le Struct TimeSpec n'est pas dans la plage de 0 à 999999999 ou a une valeur négative, elle lancera cette erreur.

Si la portée déterminée en RQTP est autre chose qu'une différence précise de l'horloge cachée de granularité, elle sera rassemblée. En outre, il pourrait y avoir un report plus tard si le reste des travaux est terminé avant que le CPU ne soit autorisé à exécuter la chaîne d'appel une fois.

Étant donné que la méthode Nanosleep ne fonctionne pas pour une période relative, elle a tendance à être risqué si la méthode est appelée à plusieurs reprises après avoir fait face à l'entrave ou aux interruptions par des signaux, car le temps entre les interruptions du signal et l'appel de redémarrage provoquera un léger changement lorsque le sommeil finitions. Utilisez Clock Nanosleep (2) avec une valeur de temps carrément pour rester à l'écart de ce problème.

Nanosleep () devrait quantifier le temps avec l'horloge en temps réel de l'adversaire, selon POSIX.1. Linux, une fois de plus, utilise l'horloge monotone de l'horloge pour surveiller le temps. C'est vraisemblablement immatériel parce que le POSIX.1 horloge settime (2) exprime particulièrement que les changements spasmodiques dans l'horloge en temps réel ne devraient pas influencer Nanosleep ().

Si nous définissons la valeur de l'horloge en temps réel via settime (2). Cela n'a aucun effet sur les programmes qui sont bloqués et en attente dans la file d'attente pour une période relative en fonction de cette horloge.

Exemple en c

Tout d'abord, nous avons dû initialiser la bibliothèque qui a la structure d'un pointeur de temps de demande en temps. Il y a deux conseils qui stockent le temps que l'utilisateur souhaite suspendre le programme et aussi le temps restant que le temps d'intervalle d'arrêt a laissé.

Après cela, nous commençons notre corps principal, et nous devons créer deux objets Timespec qui contiendront notre demande et notre temps restant. Nous pourrions attribuer n'importe quelle valeur à ces deux objets, mais dans notre cas, nous avons choisi 3 secondes et 500 nanosecondes.

Maintenant, nous allons passer les adresses des objets créés à Nanosleep, comme vous pouvez observer dans la ligne numéro 10. Nous vérifierons également si le programme a réussi ou a échoué en observant la valeur de retour de la méthode Nanosleep.

Le programme ci-dessus imprimera la sortie suivante si elle est exécutée avec succès:

Si nous modifions la valeur de réponse à 1, l'exécution du programme échouera et produira l'erreur suivante en tant que sortie.

Maintenant, si nous voulons exécuter le code suivant sur notre terminal GCC. Nous allons d'abord enregistrer notre fichier en tant que principal.C puis utilisez la commande suivante sur votre terminal pour exécuter le programme: «GCC-Wall Main.co". Un mur signifie activer tous les messages d'avertissement lors de l'exécution de notre programme.

INSECTES

L'exécution actuelle de Nanosleep () dépend du composant d'horloge bit typique, qui a un objectif de 1 / Hz S. Dans ce sens, Nanosleep () s'arrête régulièrement pendant le temps prédéfini, mais il peut prendre jusqu'à 10 ms plus long que indiqué jusqu'à ce que l'interaction revint une fois de plus. Pour une explication similaire, la valeur renvoyée en cas de signal transmis en * RMTP et est normalement ajustée à la plus grande différence suivante de 1 / Hz S.

Raisonnement:

Il est normal de suspendre l'exécution d'une chaîne pendant un certain temps pour étudier la situation en vue d'un œil sur le travail non-introduit. D'innombrables nécessités réelles peuvent être accueillies avec une extension simple pour dormir () qui donne un meilleur objectif.

Dans le POSIX.1-1990 Norme et SVR4, il est possible d'exécuter une telle pratique quotidienne, sauf que la récidive du réveil est limitée par le but de l'alarme () et des fonctions de sommeil (). Il est susceptible d'écrire une telle norme en 4.3 BSD sans utiliser de stockage statique et d'épargne sans cadre. Même s'il est possible de composer une fonction avec une utilité comparable pour dormir () en utilisant le reste des capacités Timer_ * (), une telle capacité nécessite l'utilisation des signes et la réservation d'un nombre significatif. Ce volume de IEEE Std 1003.1-2001 a besoin que Nanosleep () soit non mépris si les signes fonctionnent.

Le travail nanosleep () renvoie une valeur de 0 sur les progrès et - 1 en défaillance, ou encore chaque fois que. Ce dernier cas d'option n'est pas tout à fait la même que le sommeil (). Cela a été fait à la lumière du fait que le temps restant est retourné en utilisant un pointeur de structure de conflit, RMTP, plutôt que comme un moyen de ramener l'approbation.

Conclusion

L'objectif de cette recherche était de vous aider à développer une meilleure compréhension de la méthode nanosleep (). Pour avoir une bonne prise de méthodes comme Nanosleep, il est nécessaire de les illustrer avec l'exemple le plus simple. Nous avons fait de notre mieux pour fournir le meilleur des informations telles que les bogues, la justification, les exemples, les erreurs et le synopsis. Afin que vous puissiez continuer à améliorer l'interprétabilité et la réutilisabilité de votre code. Nous avons parcouru une explication de syntaxe simple. L'article vous aidera à obtenir rapidement une interprétation approfondie de la façon d'utiliser Nanosleep () comme méthode. Pour mieux utiliser la méthode, les considérations à mesure que les variables ont été traitées et bien expliquées pour les utilisateurs.