Recentemente ho riscontrato la necessità di dormire il thread corrente per un periodo di tempo esatto. Conosco due metodi per farlo su una piattaforma POSIX: usando nanosleep()
o usando boost::this_thread::sleep()
.boost :: this_thread :: sleep() vs. nanosleep()?
Per curiosità più di ogni altra cosa, mi chiedevo quali fossero le differenze tra i due approcci. C'è qualche differenza di precisione, e c'è qualche ragione per il non per usare l'approccio Boost?
nanosleep()
approccio:
#include <time.h>
...
struct timespec sleepTime;
struct timespec returnTime;
sleepTime.tv_sec = 0;
sleepTime.tv_nsec = 1000;
nanosleep(&sleepTime, &returnTime);
approccio Boost:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
...
boost::this_thread::sleep(boost::posix_time::nanoseconds(1000));
Solo una piccola nota all'esempio: 'nanosecondi' non è disponibile su tutti i sistemi. L'uso di 'microsecondi' sarebbe più sicuro. – real4x