Niedawno natknąłem się na potrzebę spania bieżącego wątku przez dokładny okres czasu. Wiem o dwóch metodach działania na platformie POSIX: używanie nanosleep()
lub używanie boost::this_thread::sleep()
.boost :: this_thread :: sleep() vs. nanosleep()?
Z ciekawości bardziej niż cokolwiek innego, zastanawiałem się, jakie są różnice między tymi dwoma podejściami. Czy istnieje jakakolwiek różnica w precyzji i czy istnieje jakiś powód, dla którego nie użyć metody Boost?
nanosleep()
podejście:
#include <time.h>
...
struct timespec sleepTime;
struct timespec returnTime;
sleepTime.tv_sec = 0;
sleepTime.tv_nsec = 1000;
nanosleep(&sleepTime, &returnTime);
podejście doładowania:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp>
...
boost::this_thread::sleep(boost::posix_time::nanoseconds(1000));
Tylko mała uwaga do przykładu: "nanosekundy" nie są dostępne we wszystkich systemach. Używanie 'mikrosekund" byłoby bezpieczniejsze. – real4x