Couchage pour millisecondes sur Windows, Linux, Solaris, HP-UX, IBM AIX, Vxworks, Wind River Linux?
Je dois écrire un programme C qui a besoin de dormir pour millisecondes, qui doit fonctionner sur différentes plates-formes telles que Windows, Linux, Solaris, HP-UX, IBM AIX, Vxworks, et Windriver Linux
- Sur Windows, le
Sleep
appel système fonctionnera sur millisecondes seulement. - Sur Linux,
sleep
va travailler sur les secondes;usleep
sera effectuer sur microsecondes et il est disponible sur Solaris. - Dans Vxworks, j'espère que je peux mettre en œuvre à l'aide de
taskDelay
etsysClkRateSet
.
Comment puis-je réaliser cette milliseconde dormir sur HP-UX, IBM AIX et Wind River Linux?
usleep
est POSIX devrait donc être en tout conforme à POSIX systèmes (comme HP/UX, AIX, etc.). Elle est marquée comme obsolète mais, en faveur de nanosleep
qui d'autre part est marqué comme facultatif.Notez que juste parce que vous pourriez trouver un moyen de express un n millisecondes de retard, il n'y a absolument aucune garantie que le système d'exploitation hôte sera donner vous exactement ce que vous demandez. L'OS:s vous de la liste ne sont généralement pas en temps réel, de sorte que ils vont très probablement pas garantie à des choses comme ça; quand ton délai se termine, une plus haute priorité de la tâche pourrait occuper le PROCESSEUR.
Ne lien suivant répondu à votre question? stackoverflow.com/questions/1157209/...
Double Possible de Est-il une alternative fonction de veille dans C à millisecondes?
OriginalL'auteur rashok | 2013-02-11
Vous devez vous connecter pour publier un commentaire.
Probablement une enveloppe à l'aide de la plate-forme
#define
s effectuera:Mise à jour
Se référant à Jonathan commentaire ci-dessous, s'il vous plaît trouver un plus moderne, plus portable (et ainsi corrigé :}) version ici:
Sous POSIX 2004, le
usleep()
appel a été marquée 'obsolètes', et il a été retiré de POSIX 2008. La solution privilégiée estnanosleep()
. La tendance générale dans POSIX est à préférerstruct timespec
, qui a une résolution d'une, plus de solutions de rechange telles questruct timeval
qui n'a qu'une résolution, ouusleep()
qui n'utilise pas une structure, mais fonctionne avec une résolution trop.Merci pour la notification. Corrigés.
OriginalL'auteur alk
Envisager
select
avec vide FD jeux et le délai d'attente que vous souhaitez. Dehomme sélectionnez
:En fait, il pourrait être la meilleure solution pour tout non-système Windows.
select
n'est pas disponible. Comme windriver linuxselect
n'est pas disponible.OriginalL'auteur Anton Kovalenko
Je remarque que usleep est vieillissante, mais c'est beaucoup plus simple que nanosleep. Donc je l'ai utilisé quand j'ai besoin d'un renforcement de sommeil qui permettrait à l'ajustement facile de secondes pendant le débogage de mes scripts de millisecondes ou zéro pour la production.
Cette fonction de rappel d'alarme combine les avantages de sommeil & usleep de sorte que vous pouvez
entrez un int ou un float pour sélectionner votre retard et de 0,1 va dormir un 10ème de
une seconde pendant 3 va dormir pendant 3 secondes. 3.5 secondes est traité en tant que 3 secondes.
Testé sur Linux Mint 18.3 (Ubuntu 16.04.9) comme le C et le C++ avec gcc 5.4.0.
Pour être complet, c'est un nanosleep version. C'est potentiellement plus précise que la usleep version et n'est pas menacé d'obsolescence.
Comme suggéré par @alk, les versions suivantes de retour de la appelé le sommeil de la fonction d'erreur doit avoir un lieu ou 0 en cas de succès. La définition de la structure de rem(aining) permet également à une reprise après un signal d'interruption.
Merci pour la suggestion alk. J'ai ajouté des options.
OriginalL'auteur John 9631