Je suis récemment tombé sur le besoin de dormir le fil actuel pour une période de temps exacte. Je connais deux méthodes pour le faire sur une plate-forme POSIX: en utilisant nanosleep()
ou en utilisant boost::this_thread::sleep()
. Par curiosité plus que toute autre chose, je me demandais quelles étaient les différences entre les deux approches. Y a-t-il une différence de précision, et y a-t-il une raison quelconque pour utiliser l'approche Boost?boost :: this_thread :: sleep() contre nanosleep()?
nanosleep()
approche:
#include <time.h>
...
struct timespec sleepTime;
struct timespec returnTime;
sleepTime.tv_sec = 0;
sleepTime.tv_nsec = 1000;
nanosleep(&sleepTime, &returnTime);
approche Boost:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
...
boost::this_thread::sleep(boost::posix_time::nanoseconds(1000));
Juste une petite note à l'exemple: 'nanoseconds' n'est pas disponible sur tous les systèmes. L'utilisation de 'microseconds' serait plus sûre. – real4x